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
Ejemplo n.º 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
class GroupSettings(silvaforms.SMISubEditForm):
    grok.context(interfaces.ISilvaSoftwareGroup)
    grok.view(Settings)
    grok.order(5)

    label = u"Software group settings"
    fields = silvaforms.Fields(IGroupSettings)
Ejemplo n.º 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")
Ejemplo n.º 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
class CSVSourceAddForm(silvaforms.SMIAddForm):
    """CSVSource Add Form.
    """
    grok.context(ICSVSource)
    grok.name('Silva CSV Source')

    fields = silvaforms.Fields(ICSVSourceFields)
Ejemplo n.º 7
0
class PollQuestionAddForm(silvaforms.SMIAddForm):
    """Poll Question Add Form
    """
    grok.context(IPollQuestion)
    grok.name(u"Silva Poll Question")

    fields = silvaforms.Fields(IPollQuestionFields)
Ejemplo n.º 8
0
class CommentAddForm(silvaforms.SMIAddForm):
    """Comment Add Form.
    """
    grok.context(IComment)
    grok.name('Silva Forum Comment')

    fields = silvaforms.Fields(ICommentSchema)
Ejemplo n.º 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)
Ejemplo n.º 10
0
class AutoTOCAddForm(silvaforms.SMIAddForm):
    """Add an Auto TOC.
    """
    grok.context(IAutoTOC)
    grok.name('Silva AutoTOC')

    fields = silvaforms.Fields(IAutoTOCSchema)
Ejemplo n.º 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)
Ejemplo n.º 12
0
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.")
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()
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())
Ejemplo n.º 15
0
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.")
Ejemplo n.º 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
Ejemplo n.º 17
0
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'))
Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 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())
Ejemplo n.º 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
Ejemplo n.º 22
0
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
Ejemplo n.º 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())
Ejemplo n.º 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'])
Ejemplo n.º 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
Ejemplo n.º 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'])
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())
Ejemplo n.º 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)
Ejemplo n.º 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