コード例 #1
0
ファイル: views.py プロジェクト: silvacms/Products.Silva
class IndexerEditForm(silvaforms.SMIForm):
    """Edit form for an indexer. There is not that much to edit however.
    """
    grok.context(IIndexer)
    grok.require('silva.ReadSilvaContent')
    grok.implements(IEditScreen)

    label = _("Update Silva Indexer")
    description = _(
        u"An index is not editable. "
        u"However, you can update the index to include recent added content.")
    actions = silvaforms.Actions(silvaforms.CancelEditAction())

    def update_index_available(self):
        return checkPermission('silva.ChangeSilvaContent', self.context)

    @silvaforms.action(
        _(u"Update index"),
        accesskey=u"u",
        available=update_index_available,
        description=_(u"Update index to include recent added content"))
    def update_index(self):
        self.context.update()
        notify(ObjectModifiedEvent(self.context))
        self.send_message(_(u"Index content have been successfully updated."),
                          type="feedback")
コード例 #2
0
class FileServiceSettings(silvaforms.ZMISubForm):
    grok.context(FilesService)
    grok.view(FileServiceManagementView)
    grok.order(10)

    label = _(u"Select storage")
    fields = silvaforms.Fields(IFilesService)
    actions = silvaforms.Actions(silvaforms.EditAction())
    ignoreContent = False
コード例 #3
0
class EmailMessageConfiguration(silvaforms.ConfigurationForm):
    grok.context(EmailMessageService)

    label = _("Messaging configuration")
    description = _("Configure settings for email messaging between members. "
                    "The default MailHost service is used to send messages.")
    fields = silvaforms.Fields(IEmailMessageSettings)
    actions = silvaforms.Actions(silvaforms.CancelConfigurationAction(),
                                 silvaforms.EditAction())
コード例 #4
0
class ServicePollsConfiguration(silvaforms.ZMIForm):
    """Configure service polls settings.
    """
    grok.context(IServicePolls)
    grok.name('manage_settings')

    label = "Configure globals poll settings"
    fields = silvaforms.Fields(IServicePollsConfiguration)
    actions = silvaforms.Actions(silvaforms.EditAction())
    ignoreContext = False
コード例 #5
0
class FileServiceSettingsConfiguration(silvaforms.SMISubForm):
    grok.context(FilesService)
    silvaforms.view(FileServiceConfiguration)
    silvaforms.order(10)

    label = _(u"Select storage")
    fields = silvaforms.Fields(IFilesService)
    actions = silvaforms.Actions(silvaforms.CancelConfigurationAction(),
                                 silvaforms.EditAction())
    ignoreContent = False
コード例 #6
0
class EmailMessageSettings(silvaforms.ZMIForm):
    grok.context(EmailMessageService)
    grok.require('zope2.ViewManagementScreens')
    grok.name('manage_settings')

    label = _(u"Messaging configuration")
    description = _(u"Configure settings for email messaging between members. "
                    u"The default MailHost service is used to send messages.")
    ignoreContent = False
    fields = silvaforms.Fields(IEmailMessageSettings)
    actions = silvaforms.Actions(silvaforms.EditAction())
コード例 #7
0
class AddTabBlock(silvaforms.RESTPopupForm):
    grok.adapts(TabBlock, IPage)
    grok.name('add')

    label = u'Add tabular content'
    fields = silvaforms.Fields(ITabFields)
    actions = silvaforms.Actions(silvaforms.CancelAction(),
                                 AddTabBlockAction())

    def __init__(self, context, request, configuration, restrictions):
        super(AddTabBlock, self).__init__(context, request)
        self.restrictions = restrictions
        self.configuration = configuration
コード例 #8
0
class GhostAssetEditForm(silvaforms.SMISubForm):
    """ Edit form Ghost Folder
    """
    grok.context(IGhostAsset)
    grok.view(AssetEditTab)
    grok.order(10)

    label = _(u'Edit ghost')
    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager
    dataValidators = [TargetValidator('haunted', IAsset, adding=False)]
    fields = silvaforms.Fields(IGhostAssetSchema).omit('id')
    actions = silvaforms.Actions(silvaforms.CancelEditAction(),
                                 silvaforms.EditAction())
コード例 #9
0
class EditTabBlock(silvaforms.RESTPopupForm):
    grok.adapts(TabBlock, IPage)
    grok.name('edit')

    label = u'Edit a slideshow'
    fields = silvaforms.Fields(ITabFields)
    actions = silvaforms.Actions(silvaforms.CancelAction(),
                                 EditTabBlockAction())
    ignoreContent = False

    def __init__(self, block, context, request, controller, restrictions):
        super(EditTabBlock, self).__init__(context, request)
        self.restrictions = restrictions
        self.block = block
        self.setContentData(controller)
コード例 #10
0
class CSVSourceEditForm(silvaforms.SMISubForm):
    """CSVSource Edit Form.
    """
    grok.view(AssetEditTab)
    grok.order(10)

    label = _('Edit file content')
    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager

    fields = silvaforms.Fields(ICSVSourceFields).omit('id')
    fields['file'].fileSetLabel = _(
        "Click the Upload button to replace the current CSV with a new one.")
    actions = silvaforms.Actions(silvaforms.CancelEditAction(),
                                 silvaforms.EditAction())
class GroupRemoteSettings(silvaforms.SMISubEditForm):
    grok.context(interfaces.ISilvaSoftwareRemoteGroup)
    grok.view(Settings)
    grok.order(4)

    label = u"Software remote group settings"
    actions = silvaforms.Actions(silvaforms.SMISubEditForm.actions)
    fields = silvaforms.Fields(IRemoteGroupFields).omit('id', 'title')

    @silvaforms.action('Synchronize')
    def synchronize(self):
        try:
            self.context.synchronize(self.request)
        except ValueError, error:
            raise silvaforms.ActionError(error.args[0])
        self.send_message('Software synchronized.')
        return silvaforms.SUCCESS
コード例 #12
0
ファイル: smi.py プロジェクト: Python3pkg/Products.Silva
class ImageEditForm(silvaforms.SMISubForm):
    """ Edit image attributes
    """
    grok.context(IImage)
    grok.view(AssetEditTab)
    grok.order(10)

    label = _('Edit')
    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager

    fields = silvaforms.Fields(IImageAddFields).omit('id')
    fields['image'].fileSetLabel = _(
        "Click the Upload button to replace the current image with a new image."
    )
    actions = silvaforms.Actions(silvaforms.CancelEditAction(),
                                 silvaforms.EditAction())
コード例 #13
0
ファイル: smi.py プロジェクト: Python3pkg/Products.Silva
class FileEditForm(silvaforms.SMISubForm):
    """Edit file.
    """
    grok.context(IFile)
    grok.view(AssetEditTab)
    grok.order(10)

    label = _('Edit file content')
    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager

    fields = silvaforms.Fields(IFileAddFields).omit('id')
    fields['title'].required = False
    fields['file'].fileSetLabel = _(
        "Click the Upload button to replace the current file with a new file.")
    actions = silvaforms.Actions(silvaforms.CancelEditAction(),
                                 silvaforms.EditAction())
コード例 #14
0
class SourceAssetEditForm(silvaforms.SMIEditForm):
    grok.context(ISourceAsset)

    actions = silvaforms.Actions(silvaforms.CancelEditAction())
    readOnly = False

    def update(self):
        editable = self.context.get_editable()
        if editable is not None:
            self.controller = editable.get_controller(self.request)
        else:
            self.controller = self.context.get_viewable().get_controller(
                self.request)
            self.readOnly = True

    def updateWidgets(self):
        super(SourceAssetEditForm, self).updateWidgets()
        if self.controller is not None:
            self.fieldWidgets.extend(
                self.controller.fieldWidgets(ignoreRequest=self.readOnly,
                                             ignoreContent=False,
                                             display=self.readOnly))

    @property
    def formErrors(self):
        if self.controller is not None:
            return self.controller.formErrors
        return []

    def isEditable(self):
        return (self.controller is not None and not self.readOnly
                and self.controller.mode != silvaforms.DISPLAY)

    @silvaforms.action(_("Save"),
                       available=isEditable,
                       implements=silvaforms.IDefaultAction,
                       accesskey='ctrl+s')
    def save(self):
        status = self.controller.save()
        if status is silvaforms.SUCCESS:
            self.send_message(_("Changes saved."), type="feedback")
        return status
コード例 #15
0
class FileServiceConvertConfiguration(silvaforms.SMISubForm):
    grok.context(FilesService)
    grok.view(FileServiceConfiguration)
    grok.order(20)

    label = _(u"Convert stored files")
    description = _(u"Convert all currently stored file to "
                    u"the current set storage.")
    actions = silvaforms.Actions(silvaforms.CancelConfigurationAction())

    def available(self):
        if self.context.storage is None:
            return False
        return self.context.storage is not ZODBFile

    @silvaforms.action(_(u'Convert all files'))
    def convert(self):
        parent = self.context.get_publication()
        self.context.convert_storage(parent)
        self.send_message(_(u'Storage for Silva Files and Images converted. '
                            u'Check the log for more details.'),
                          type='feedback')
コード例 #16
0
ファイル: smi.py プロジェクト: silvacms/Products.Silva
class FileTextEditForm(silvaforms.SMISubForm):
    """Edit content as a text file.
    """
    grok.context(IFile)
    grok.view(AssetEditTab)
    grok.order(20)

    label = _(u'Edit text content')
    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager

    fields = silvaforms.Fields(IFileTextFields)
    actions = silvaforms.Actions(silvaforms.CancelEditAction(),
                                 silvaforms.EditAction())

    def available(self):
        if self.context.is_text_editable():
            try:
                unicode(self.context.get_text())
                return True
            except (UnicodeDecodeError, TypeError):
                return False
        return False
コード例 #17
0
ファイル: smi.py プロジェクト: Python3pkg/Products.Silva
class ImageFormatAndScalingForm(silvaforms.SMISubForm):
    """ form to resize / change format of image.
    """
    grok.context(IImage)
    grok.view(AssetEditTab)
    grok.order(20)

    ignoreContent = False
    dataManager = silvaforms.SilvaDataManager

    label = _('Format and scaling')
    actions = silvaforms.Actions(silvaforms.CancelEditAction())
    fields = silvaforms.Fields(IFormatAndScalingFields)
    fields['web_format'].mode = 'radio'
    fields['web_scale'].defaultValue = '100%'

    @silvaforms.action(
        title=_('Change'),
        description=_('Scale and/or crop the image with the new settings'),
        implements=silvaforms.IDefaultAction)
    def set_properties(self):
        data, errors = self.extractData()
        if errors:
            return silvaforms.FAILURE
        try:
            self.context.set_web_presentation_properties(
                data.getWithDefault('web_format'),
                data.getWithDefault('web_scale'),
                data.getWithDefault('web_crop'))
        except ValueError as e:
            self.send_message(e.args[0], type='error')
            return silvaforms.FAILURE

        notify(ObjectModifiedEvent(self.context))
        self.send_message(_('Scaling and/or format changed.'), type='feedback')
        return silvaforms.SUCCESS
コード例 #18
0
class SourceAssetAddForm(silvaforms.SMIAddForm):
    """Add form for a link.
    """
    grok.context(ISourceAsset)
    grok.name('Silva Source Asset')

    fields = silvaforms.Fields(ISourceSelectField)
    titleFields = silvaforms.Fields(ITitledContent)
    actions = silvaforms.Actions(silvaforms.CancelAddAction())
    source = None

    def publishTraverse(self, request, name):
        factory = getWrapper(self.context, IExternalSourceManager)
        try:
            self.source = factory(request, name=urllib.parse.unquote(name))
        except SourceError:
            parent = super(SourceAssetAddForm, self)
            return parent.publishTraverse(request, name)
        self.fields = self.titleFields
        self.__name__ = '/'.join((self.__name__, name))
        return self

    @property
    def formErrors(self):
        if self.source is not None:
            return self.source.formErrors
        return []

    def updateWidgets(self):
        super(SourceAssetAddForm, self).updateWidgets()
        if self.source is not None:
            self.fieldWidgets.extend(
                self.source.fieldWidgets(ignoreRequest=False,
                                         ignoreContent=True))

    @silvaforms.action(_("Select source"),
                       available=lambda form: form.source is None,
                       implements=silvaforms.IDefaultAction,
                       accesskey='ctrl+s')
    def select_source(self):
        data, errors = self.extractData()
        if errors:
            return silvaforms.FAILURE
        raise RedirectToPage(sub_tab=data['source'].getId())

    @silvaforms.action(_("Save"),
                       available=lambda form: form.source is not None,
                       implements=silvaforms.IDefaultAction,
                       accesskey='ctrl+s')
    def save(self):
        data, errors = self.extractData()
        source_data, source_errors = self.source.extractData()
        if errors or source_errors:
            return silvaforms.FAILURE
        try:
            content = self._add(self.context, data)
        except ValueError as error:
            self.send_message(error.args[0], type="error")
            return silvaforms.FAILURE
        editable = content.get_editable()
        factory = getWrapper(editable, IExternalSourceManager)
        source = factory(self.request, name=self.source.getSourceId())
        source.create()
        editable.set_parameters_identifier(source.getId())
        notify(ObjectModifiedEvent(content))
        self.send_message(_("Source Asset added."), type="feedback")
        raise RedirectToPage(content=content)
コード例 #19
0
class ExternalSourceController(silvaforms.FormData):
    grok.implements(IExternalSourceController)
    security = ClassSecurityInfo()

    actions = silvaforms.Actions()
    parameterFields = silvaforms.Fields()
    settingFields = silvaforms.Fields()
    ignoreRequest = True
    ignoreContent = False

    def __init__(self, source, manager, request, instance):
        dataManager = [
            (None,
             lambda content: silvaforms.FieldValueDataManager(self, content))
        ]
        self.manager = manager
        self.source = source
        self.__parent__ = manager.context  # Enable security checks.
        if source is not None:
            fields = source.get_parameters_form()
            if fields is not None:
                self.parameterFields = silvaforms.Fields(fields)
            # This doesn't work because authentication is not done
            # when __init__ is called.
            if checkPermission(SETTINGS_PERMISSION, manager.context):
                self.settingFields += TextField(
                    identifier="source_template",
                    title="Source template",
                    description=
                    "<!-- source output --> will be replaced by the HTML code generated by the source.",
                    constrainValue=validateSourceTemplate,
                    required=False)
                dataManager.append(
                    ('source_template', silvaforms.SilvaDataManager))
        self.dataManager = silvaforms.MultiDataManagerFactory(dataManager)
        super(ExternalSourceController, self).__init__(manager.context,
                                                       request, instance)

    def getId(self):
        content = self.getContent()
        if content is not None:
            return content.get_parameter_identifier()
        return None

    security.declareProtected(permissions.AccessContentsInformation,
                              'getSourceId')

    def getSourceId(self):
        return self.source.id

    def extractData(self, fields=None):
        if fields is None:
            fields = self.parameterFields + self.settingFields
        return super(ExternalSourceController, self).extractData(fields)

    def editable(self):
        return len(self.parameterFields) != 0

    @property
    def label(self):
        if self.source is not None:
            return self.source.get_title()
        return _(u"Broken source")

    @property
    def description(self):
        if self.source is not None:
            return self.source.get_description()
        return u''

    @property
    def fields(self):
        return self.parameterFields

    def indexes(self):
        # Return index entries for Silva Indexer.
        return []

    def fulltext(self):
        # Return fulltext for the catalog
        return []

    def new(self):
        assert self.source is not None, u'Cannot create broken source'
        assert self.getContent() is None, u'Cannot override existing source'
        self.setContentData(self.manager.new(self.source))
        return self.getId()

    def copy(self, destination):
        assert self.source is not None, u'Cannot copy broken source'
        assert self.getSourceId() == destination.getSourceId()
        source = self.getContentData()
        target = destination.getContentData()
        for field in self.parameterFields:
            try:
                target.set(field.identifier, source.get(field.identifier))
            except KeyError:
                pass

    @silvaforms.action(_(u"Create"))
    def create(self):
        self.new()
        return self.save()

    @silvaforms.action(_(u"Save"))
    def save(self):
        assert self.getContent() is not None, u'Cannot save to missing source'
        if self.source is None:
            raise error.SourceMissingError('unknow')
        data, errors = self.extractData()
        if errors:
            return silvaforms.FAILURE
        manager = self.getContentData()
        for field in self.parameterFields + self.settingFields:
            value = data.getWithDefault(field.identifier)
            if value is not silvaforms.NO_CHANGE:
                manager.set(field.identifier, value)
        return silvaforms.SUCCESS

    @silvaforms.action(_(u"Remove"))
    def remove(self):
        assert self.getContent() is not None, u'Cannot remove missing source'
        manager = self.getContentData()
        identifier = self.getId()
        for field in self.parameterFields:
            manager.delete(field.identifier)
        self.manager.remove(identifier)
        return silvaforms.SUCCESS

    def fieldWidgets(self,
                     ignoreRequest=False,
                     ignoreContent=True,
                     display=False):
        if display:
            self.mode = silvaforms.DISPLAY
            self.ignoreRequest = True
            self.ignoreContent = False
        else:
            self.mode = silvaforms.INPUT
            self.ignoreRequest = ignoreRequest
            self.ignoreContent = ignoreContent
        widgets = silvaforms.Widgets(form=self, request=self.request)
        widgets.extend(self.parameterFields)
        if self.settingFields and not display:
            widgets.extend(self.settingFields)
        widgets.update()
        return widgets

    security.declareProtected(permissions.AccessContentsInformation, 'render')

    def render(self, view=False, preview=False):
        if self.source is None:
            raise error.SourceMissingError('unknow')
        if preview and not self.source.is_previewable():
            raise error.SourcePreviewError(self)
        values = {}
        template = None
        if self.parameterFields:
            if not self.ignoreRequest:
                values, errors = self.extractData(self.parameterFields)
                if errors:
                    raise error.ParametersError(errors)
            elif not self.ignoreContent and self.getContent() is not None:
                template = self.getContent().get_source_template()
                manager = self.getContentData()
                for field in self.parameterFields:
                    try:
                        value = manager.get(field.identifier)
                    except KeyError:
                        value = field.getDefaultValue(self)
                    values[field.identifier] = value
            else:
                raise error.ParametersError()

        try:
            html = self.source.to_html(self.context, self.request, **values)
        except:
            info = u''.join(format_exception(*sys.exc_info()))
            getUtility(ISourceErrors).report(info)
            raise error.SourceRenderingError(self, info)
        if not preview and template:
            html = template.replace('<!-- source output -->', html)
        return html