コード例 #1
0
class ActivityAggregatorAddForm(silvaforms.SMIAddForm):
    grok.name('Silva Software Activity Aggregator')
    grok.context(SilvaSoftwareActivityAggregator)

    fields = silvaforms.Fields(ITitledContent)
    fields['id'].defaultValue = id_default_value
    fields['title'].defaultValue = title_default_value
コード例 #2
0
class ContactForm(silvaforms.PublicForm):
     """Contact form.
     """
     grok.name('contact.html')
     grok.context(IContainer)

     label = _(u'Contact')
     description = _(u'You can contact the Community Manager with this form.')
     fields = silvaforms.Fields(IContactFields)

     @silvaforms.action(_(u"Contact us!"), identifier='contact', accesskey='c')
     def contact(self):
         data, errors = self.extractData()
         if errors:
             self.status = _(u'Please correct the errors.')
             return silvaforms.FAILURE
         sendmail(self.context, TEMPLATE.format(**data.getDictWithDefault()),
                  mto='*****@*****.**', mfrom='*****@*****.**',
                  subject='Contact request from silvacms.org')
         success = self.context.get_root()._getOb('success', None)
         if success is not None:
             self.response.redirect(absoluteURL(success, self.request))
         else:
             self.status = _(u'Thank you for your message.')
         return silvaforms.SUCCESS
コード例 #3
0
class GroupSettings(silvaforms.SMISubEditForm):
    grok.context(interfaces.ISilvaSoftwareGroup)
    grok.view(Settings)
    grok.order(5)

    label = u"Software group settings"
    fields = silvaforms.Fields(IGroupSettings)
コード例 #4
0
class PartialUpgradesForm(silvaforms.ZMIForm):
    """From to partially upgrade a site. TO USE ONLY if you known what
    you are doing.
    """
    grok.name('manage_partialUpgrade')
    fields = silvaforms.Fields(IPartialUpgrade)
    label = _(u"Upgrade site")
    description = _(u"Below you find a form that allows you to specify "
                    u"an object to upgrade, and which version the object "
                    u"is in now. When you enter values in those fields and "
                    u"press the 'upgrade' button, Silva will try to upgrade "
                    u"the object to get it in proper shape for the current "
                    u"Silva version. Note that this functionality is "
                    u"experimental, and it is known that performing a "
                    u"partial upgrade on an object may fail and may "
                    u"even (in some situations) cause the object to "
                    u"become unusable.")

    @silvaforms.action(_("Upgrade"))
    def upgrade(self):
        data, errors = self.extractData()
        if errors:
            return
        path, version = data["path"], data["version"]
        root = self.context.get_root()
        # If path is an unicode string it need to be encoded.
        path = path.encode('utf-8')
        content = root.restrictedTraverse(path)
        self.context.upgrade_content(content, version,
                                     root.get_silva_software_version())
        self.status = _(
            u"Content upgrade succeeded. See event log for details")
コード例 #5
0
class CloudForm(silvaforms.PublicForm):
    """Cloud form.
    """
    grok.name('cloud.html')
    grok.context(IContainer)

    label = _(u'Cloud instance')
    description = _(u"""You can request a cloud site using this form.
         The site will usually be setup in less than a business
         day. Once it is done you'll be sent a URL, e.g.:
         http://subdomain.cloud.silvacms.org, a user and password to
         access your site. Then you'll have your own Silva sandbox and
         you can give Silva an extensive test drive. There is no
         guarantee of service on this hosting.""")
    fields = silvaforms.Fields(IContactFields)

    @silvaforms.action(_(u"Get your cloud instance!"),
                       identifier='cloud',
                       accesskey='c')
    def cloud(self):
        data, errors = self.extractData()
        if errors:
            self.status = _(u'Please correct the errors.')
            return silvaforms.FAILURE
        sendmail(self.context,
                 TEMPLATE.format(**data.getDictWithDefault()),
                 mto='*****@*****.**',
                 mfrom='*****@*****.**',
                 subject='Cloud instance request from silvacms.org')
        self.response.redirect(
            absoluteURL(self.context, self.request) + '/cloud-booked.html')
        return silvaforms.SUCCESS
コード例 #6
0
class CSVSourceAddForm(silvaforms.SMIAddForm):
    """CSVSource Add Form.
    """
    grok.context(ICSVSource)
    grok.name('Silva CSV Source')

    fields = silvaforms.Fields(ICSVSourceFields)
コード例 #7
0
ファイル: smi.py プロジェクト: silvacms/Products.SilvaPoll
class PollQuestionAddForm(silvaforms.SMIAddForm):
    """Poll Question Add Form
    """
    grok.context(IPollQuestion)
    grok.name(u"Silva Poll Question")

    fields = silvaforms.Fields(IPollQuestionFields)
コード例 #8
0
class CommentAddForm(silvaforms.SMIAddForm):
    """Comment Add Form.
    """
    grok.context(IComment)
    grok.name('Silva Forum Comment')

    fields = silvaforms.Fields(ICommentSchema)
コード例 #9
0
class PackageSettings(silvaforms.SMISubEditForm):
    grok.context(interfaces.ISilvaSoftwarePackage)
    grok.view(Settings)
    grok.order(5)

    label = u"Software package settings"
    fields = silvaforms.Fields(IPackageSettings)
コード例 #10
0
class AutoTOCAddForm(silvaforms.SMIAddForm):
    """Add an Auto TOC.
    """
    grok.context(IAutoTOC)
    grok.name('Silva AutoTOC')

    fields = silvaforms.Fields(IAutoTOCSchema)
コード例 #11
0
 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)
コード例 #12
0
ファイル: Link.py プロジェクト: silvacms/Products.Silva
class LinkEditForm(silvaforms.SMIEditForm):
    """Edit form for a link.
    """
    grok.context(interfaces.ILink)

    fields = silvaforms.Fields(ILinkSchema).omit('id')
    fields['target'].referenceNotSetLabel = _(
        u"Click the Lookup button to select an item to refer to.")
コード例 #13
0
class ActivityAggregatorEditForm(silvaforms.SMIEditForm):
    grok.context(SilvaSoftwareActivityAggregator)

    actions = silvaforms.SMIEditForm.actions.copy()
    fields = silvaforms.Fields(ITitledContent).omit('id')

    @silvaforms.action('Refresh')
    def refresh(self):
        self.context.refresh()
コード例 #14
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())
コード例 #15
0
ファイル: Link.py プロジェクト: silvacms/Products.Silva
class LinkAddForm(silvaforms.SMIAddForm):
    """Add form for a link.
    """
    grok.context(interfaces.ILink)
    grok.name(u'Silva Link')

    fields = silvaforms.Fields(ILinkSchema)
    fields['target'].referenceNotSetLabel = _(
        u"Click the Lookup button to select an item to refer to.")
コード例 #16
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
コード例 #17
0
ファイル: smi.py プロジェクト: Python3pkg/Products.Silva
class GhostFolderEditForm(silvaforms.SMIEditForm):
    """ Edit form Ghost Folder
    """
    grok.context(IGhostFolder)
    grok.name('edit')

    fields = silvaforms.Fields(IGhostFolderSchema).omit('id')
    dataValidators = [TargetValidator('haunted', IContainer, adding=False)]
    actions = silvaforms.SMIEditForm.actions + SyncAction(_('Synchronize'))
コード例 #18
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
コード例 #19
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
コード例 #20
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())
コード例 #21
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
コード例 #22
0
ファイル: Root.py プロジェクト: Python3pkg/Products.Silva
class ZopeWelcomePage(silvaforms.ZMIForm):
    grok.context(Application)
    grok.name('index.html')
    grok.require('zope2.Public')

    fields = silvaforms.Fields(ISilvaRootAddFields)

    def update(self):
        self.sites = self.context.objectValues('Silva Root')
        self.is_dev = Globals.DevelopmentMode
        self.version = extensionRegistry.get_extension('Silva').version

    def is_manager(self):
        return getSecurityManager().checkPermission('View Management Screens',
                                                    self.context)

    @silvaforms.action(_("Authenticate first to add a new site"),
                       identifier='login',
                       available=lambda form: not form.is_manager())
    def login(self):
        if not self.is_manager():
            raise Unauthorized("You must authenticate to add a new Silva Site")

    @silvaforms.action(_("Add a new site"),
                       identifier='add_site',
                       available=lambda form: form.is_manager())
    def add_site(self):
        data, errors = self.extractData()
        if errors:
            return silvaforms.FAILURE
        self.context.manage_addProduct['Silva'].manage_addRoot(
            data['identifier'], data.getDefault('title'))
        root = self.context._getOb(data['identifier'])
        getUtility(IMessageService).send(
            _("New Silva site ${identifier} added.",
              mapping={'identifier': data['identifier']}), self.request)

        if data.getDefault('add_search'):
            # install a silva find instance
            factory = root.manage_addProduct['SilvaFind']
            factory.manage_addSilvaFind('search', 'Search this site')

        if data.getDefault('add_documentation'):
            transaction.commit()  # Be sure everything in the site is
            # in the DB before.  install the user
            # documentation .zexp
            install_documentation(root, self.request)

        self.redirect(absoluteURL(root, self.request) + '/edit')
        return silvaforms.SUCCESS
コード例 #23
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())
コード例 #24
0
class FolderAddForm(silvaforms.SMIAddForm):
    """Add form for a Folder.
    """
    grok.context(IFolder)
    grok.name(u'Silva Folder')

    fields = silvaforms.Fields(IContainerSchema)
    # Prevent to call a folder index.
    fields['id'].validateForInterface = IFolder

    def _edit(self, parent, content, data):
        policies = getUtility(IContainerPolicyService)
        policy = policies.get_policy(data['default_item'])
        policy.createDefaultDocument(content, data['title'])
コード例 #25
0
class ManageExportCodeSources(silvaforms.ZMIForm):
    grok.name('manage_export_codesources')
    grok.context(IContainer)

    label = u'Mass export of codesources'
    description = u'Export every codesources located in this container and ' \
        u'optionally in sub-containers.'
    fields = silvaforms.Fields(IExportCodeSourcesFields)

    @silvaforms.action('Export')
    def export(self):
        values, errors = self.extractData()
        if errors:
            return silvaforms.FAILURE
        exported = []
        extension_name = values['extension_name']
        if ':' in extension_name:
            extension_name, entry_name = extension_name.split(':', 1)
        extension = pkg_resources.working_set.by_key[extension_name]
        directory = os.path.dirname(
            extension.load_entry_point('Products.SilvaExternalSources.sources',
                                       entry_name).__file__)

        if values['recursive']:
            sources = walk_silva_tree(self.context, requires=ICodeSource)
        else:
            sources = self.context.objectValues('Silva Code Source')

        for source in sources:
            if source.meta_type != 'Silva Code Source':
                continue
            identifier = source.getId()
            target = os.path.join(directory, identifier)
            location = (extension.project_name + ':' +
                        target[len(extension.location):])

            if source.get_fs_location() not in (None, location):
                continue
            if not os.path.exists(target):
                os.makedirs(target)
            source._fs_location = location
            installable = CodeSourceInstallable(location, target)
            installable.export(source)
            exported.append(location)
        if exported:
            self.status = 'Exported: {0}.'.format(', '.join(exported))
        else:
            self.status = 'Nothing exported.'
        return silvaforms.SUCCESS
コード例 #26
0
class GhostAssetAddForm(silvaforms.SMIAddForm):
    """ Add form for ghost folders
    """
    grok.name(u'Silva Ghost Asset')

    fields = silvaforms.Fields(IGhostAssetSchema)
    fields['haunted'].referenceNotSetLabel = _(
        u"Click the Lookup button to select an asset to haunt.")
    dataValidators = [TargetValidator('haunted', IAsset, adding=True)]

    def _add(self, parent, data):
        factory = parent.manage_addProduct['Silva']
        return factory.manage_addGhostAsset(data['id'],
                                            None,
                                            haunted=data['haunted'])
コード例 #27
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())
コード例 #28
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)
コード例 #29
0
class MailThatPage(silvaforms.PublicForm):
    grok.name('mailthatpage.html')
    grok.context(ISilvaObject)
    fields = silvaforms.Fields(IMailForm)

    label = _(u"Send this page by mail")

    def __call__(self):
        interface.alsoProvides(self.request, INonCachedLayer)
        return super(MailThatPage, self).__call__()

    @silvaforms.action(_(u"Send"))
    def send(self):
        data, errors = self.extractData()
        if errors:
            self.status = _(u"Please correct the errors.")
            return silvaforms.FAILURE

        metadata = interfaces.IMetadata(self.context.get_root())
        mail_template = metadata('mail-pageactions', 'mail-body')
        mail_from = metadata('mail-pageactions', 'mail-from')

        if (not mail_from) or (not mail_template):
            self.status = _(u"Mail settings are not configured, "
                            "can't send mail at the moment.")
            return silvaforms.FAILURE

        url = absoluteURL(self.context, self.request)
        body = mail_template % {'title': self.context.get_title(), 'url': url}
        pdf = component.getMultiAdapter((self.context, self.request),
                                        name="index.pdf").pdf()

        message = MIMEMultipart()
        message['Subject'] = data['subject']
        message['To'] = data['to']
        message['Form'] = mail_from

        message.attach(MIMEText(body, 'plain', 'UTF-8'))
        message.attach(MIMEPdf(pdf, self.context.getId()))

        try:
            sendmail(self.context, message.as_string(), data['to'], mail_from,
                     data['subject'])
        except SMTPException, e:
            self.status = str(e)
        else:
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