コード例 #1
0
ファイル: base.py プロジェクト: silvacms/silva.ui
 def get_payload(self):
     try:
         screen = self.payload()
     except PageResult as error:
         screen = error.get_payload(self)
     navigation = self.get_navigation()
     metadata = {
         "ifaces": screen.get("ifaces", []),
         "title": {
             "ifaces": ["title"],
             "title": self.get_menu_title(),
             "icon": IIconResolver(self.request).get_content_url(self.context),
         },
         "menu": {
             "content": self.get_menu_entries(ContentMenu),
             "view": self.get_menu_entries(ViewMenu),
             "actions": self.get_menu_entries(ActionMenu),
             "user": self.get_menu_entries(UserMenu),
         },
         "path": self.get_content_path(self.context),
     }
     if not IRoot.providedBy(self.context):
         metadata["up"] = self.get_menu_parent()
         navigation["screen"] = metadata["up"].get("screen")
     return {"content": {"ifaces": ["screen"], "metadata": metadata, "screen": screen}, "navigation": navigation}
コード例 #2
0
def container_moved_update_used_space(content, event):
    """Event called on folder, when they are moved, we want to update
    the quota on parents folders.
    """
    if content != event.object or IRoot.providedBy(content):
        # Root is being destroyed, we don't care about quota anymore.
        return

    if event.newParent is event.oldParent:
        # For rename event, we don't need to do something.
        return

    service = queryUtility(IExtensionService)
    if service is None:
        return
    verify = service.get_quota_subsystem_status()
    if verify is None:
        # Quota accounting is disabled.
        return

    size = content.used_space
    if not size or size < 0:
        return
    if event.oldParent and IQuotaContainer.providedBy(event.oldParent):
        event.oldParent.update_used_space(-size, verify)
    if event.newParent and IQuotaContainer.providedBy(event.newParent):
        event.newParent.update_used_space(size, verify)
コード例 #3
0
def container_moved_update_used_space(content, event):
    """Event called on folder, when they are moved, we want to update
    the quota on parents folders.
    """
    if content != event.object or IRoot.providedBy(content):
        # Root is being destroyed, we don't care about quota anymore.
        return

    if event.newParent is event.oldParent:
        # For rename event, we don't need to do something.
        return

    service = queryUtility(IExtensionService)
    if service is None:
        return
    verify = service.get_quota_subsystem_status()
    if verify is None:
        # Quota accounting is disabled.
        return

    size = content.used_space
    if not size or size < 0:
        return
    if event.oldParent and IQuotaContainer.providedBy(event.oldParent):
        event.oldParent.update_used_space(-size, verify)
    if event.newParent and IQuotaContainer.providedBy(event.newParent):
        event.newParent.update_used_space(size, verify)
コード例 #4
0
ファイル: script.py プロジェクト: silvacms/silva.system.utils
def silva_session_arg_generator(parent):
    root, options = parent.next()

    if not hasattr(options, 'paths') or not len(options.paths):
        fail(u"specifiy at least one Silva root path")

    for path in options.paths:
        try:
            silva = root.unrestrictedTraverse(path)
        except KeyError:
            fail("%s is not a valid Zope path" % path)
        if not IRoot.providedBy(silva):
            fail("%s is not a valid Silva root" % path)
        if ISite.providedBy(silva):
            setSite(silva)
        else:
            setSite(None)
        setHooks()

        if hasattr(options, 'username') and options.username:
            user = zope_find_user(silva, options.username)
            newSecurityManager(None, user)

        yield silva, options

    try:
        parent.next()
    except StopIteration:
        pass
    else:
        fail(u"internal error")
コード例 #5
0
ファイル: manage.py プロジェクト: silvacms/silva.system.utils
 def run(self, root, options):
     if options.list:
         logger.info('Listing silva sites')
         for content in root.objectValues():
             if IRoot.providedBy(content):
                 logger.info('%s (version %s)' % (
                         '/'.join(content.getPhysicalPath()),
                         content.get_silva_content_version()))
         return
     if not options.identifier:
         fail(u"Please provide a site identifier")
     identifier = options.identifier
     if ':' in identifier:
         identifier, title = identifier.split(':', 1)
     else:
         title = identifier
     if options.delete:
         if identifier not in root.objectIds():
             fail(
                 u'There is no such Silva root "%s" to delete.',
                 identifier)
         root.manage_delObjects([identifier])
         return
     if options.add:
         if identifier in root.objectIds():
             fail(
                 u'There is already a Zope object identifier by "%s"',
                 identifier)
         factory = root.manage_addProduct['Silva']
         factory.manage_addRoot(identifier, title)
         transaction.commit()
         logger.info(
             u'Silva root "%s" added.', identifier)
     root = root._getOb(identifier)
     if options.documentation:
         factory = root.manage_addProduct['SilvaFind']
         factory.manage_addSilvaFind('search', 'Search this site')
         install_documentation(root, TestRequest())
         transaction.commit()
         logger.info(
             u'Silva documentation installed inside Silva root "%s".',
             identifier)
     if options.user:
         parts = options.user.split(':')
         if len(parts) < 2 or len(parts) > 3:
             fail('Impossible to interpret user definition')
         username = parts[0]
         password = parts[1]
         role = parts[2] if len(parts) == 3 else 'Manager'
         acl_users = root._getOb('acl_users')
         users = acl_users._getOb('users')
         roles = acl_users._getOb('roles')
         if not role in roles.listRoleIds():
             fail(u'Role "%s" unknown.' % role)
         users.addUser(username, username, password)
         roles.assignRoleToPrincipal(role, username)
         transaction.commit()
         logger.info(
             u'User added to Silva root "%s".', identifier)
コード例 #6
0
 def _get_source(self):
     c = self.aq_inner.aq_parent
     while True:
         if INewsPublication.providedBy(c):
             return c
         if IRoot.providedBy(c):
             return None
         c = c.aq_parent
     return None
コード例 #7
0
ファイル: admin.py プロジェクト: silvacms/silva.core.smi
 def update(self):
     self.get_icon = IIconResolver(self.request).get_tag
     self.main_services = self.get_services(self.context.get_root())
     self.local_services = None
     container = self.context.get_publication()
     while not IRoot.providedBy(container):
         if ISiteManager(container).is_site():
             self.local_services = self.get_services(container)
             break
         container = aq_parent(container).get_publication()
コード例 #8
0
 def current_section_class(self):
     before = None
     for parent in self.request.PARENTS:
         if IRoot.providedBy(parent):
             if before is not None and ISilvaObject.providedBy(before):
                 return 'section-{0}'.format(before.getId())
             else:
                 break
         before = parent
     return 'section-root'
コード例 #9
0
    def _is_installed(self, content):
        if 'instance' in content:
            if IRoot.implementedBy(content['instance']):
                return False

            return (not self._is_forbidden(content['name'])
                    and extensionRegistry.is_installed(content['product'],
                                                       self.root))

        return False
コード例 #10
0
ファイル: addables.py プロジェクト: silvacms/Products.Silva
    def _is_installed(self, content):
        if 'instance' in content:
            if IRoot.implementedBy(content['instance']):
                return False

            return (
                not self._is_forbidden(content['name']) and
                extensionRegistry.is_installed(content['product'], self.root))

        return False
コード例 #11
0
 def current_section_class(self):
     before = None
     for parent in self.request.PARENTS:
         if IRoot.providedBy(parent):
             if before is not None and ISilvaObject.providedBy(before):
                 return 'section-{0}'.format(before.getId())
             else:
                 break
         before = parent
     return 'section-root'
コード例 #12
0
ファイル: absoluteurl.py プロジェクト: aktion-hip/silva_tools
 def getStopCondition(self, container):
     '''
     Returns true if recursive upward traversal has to stop.
     Subclasses may override.
     @param container: the actual container object
     '''
     return (container is None or
             self._isLocalSite(container) or
             IRoot.providedBy(container) or
             #self._isVirtualHostRoot(container) or
             not ITraversable.providedBy(container))
コード例 #13
0
    def update_used_space(self, delta, verify=True):
        if IContentImporter.providedBy(aq_parent(self)):
            aq_inner(self).update_used_space(delta, verify)
            return

        self.used_space += delta
        # If we add stuff, check we're not over quota.
        if verify and delta > 0:
            self._verify_quota()

        if not IRoot.providedBy(self):
            container = aq_parent(self)
            if container is not None:
                container.update_used_space(delta, verify)
コード例 #14
0
ファイル: content.py プロジェクト: silvacms/silva.app.news
def get_default_viewer(context):
    """Adapter factory to get the contextual news viewer for a news item
    """
    parents = context.aq_chain[1:]
    for parent in parents:
        if IRoot.providedBy(parent):
            return None
        if INewsViewer.providedBy(parent):
            return parent
        if INewsPublication.providedBy(parent):
            default = parent.get_default()
            if default and INewsViewer.providedBy(default):
                return default
    return None
コード例 #15
0
    def update_used_space(self, delta, verify=True):
        if IContentImporter.providedBy(aq_parent(self)):
            aq_inner(self).update_used_space(delta, verify)
            return

        self.used_space += delta
        # If we add stuff, check we're not over quota.
        if verify and delta > 0:
            self._verify_quota()

        if not IRoot.providedBy(self):
            container = aq_parent(self)
            if container is not None:
                container.update_used_space(delta, verify)
コード例 #16
0
def availableSources(context):
    """List available sources in the site starting at context.
    """
    sources = {}
    while context is not None:
        for item in context.objectValues():
            if (IExternalSource.providedBy(item) and
                item.id not in sources and item.is_usable()):
                sources[item.id] = item
        if IRoot.providedBy(context):
            break
        context = Acquisition.aq_parent(context)
    sources = sources.items()
    sources.sort(key=lambda i: i[1].get_title().lower())
    return sources
コード例 #17
0
def availableSources(context):
    """List available sources in the site starting at context.
    """
    sources = {}
    while context is not None:
        for item in context.objectValues():
            if (IExternalSource.providedBy(item) and
                item.id not in sources and item.is_usable()):
                sources[item.id] = item
        if IRoot.providedBy(context):
            break
        context = Acquisition.aq_parent(context)
    sources = list(sources.items())
    sources.sort(key=lambda i: i[1].get_title().lower())
    return sources
コード例 #18
0
ファイル: base.py プロジェクト: silvacms/silva.ui
    def get_navigation(self):
        service = getUtility(IIntIds)
        parents = []
        content = self.context.get_container()

        def identifier(content):
            return "nav" + str(service.register(content))

        while content:
            parents.append(identifier(content))
            if IRoot.providedBy(content):
                break
            content = aq_parent(content)

        parents.reverse()
        return {"current": parents}
コード例 #19
0
ファイル: invalidation.py プロジェクト: silvacms/silva.ui
def register_remove(target, event):
    if not IContainer.providedBy(aq_parent(target)):
        return
    if IRoot.providedBy(event.object):
        # If you delete your Silva root, we don't care about anything.
        return
    if event.oldParent is not None:
        if event.object is target:
            if event.newParent is not event.oldParent:
                # That was a move or a delete, but not a rename
                invalidation_transaction.register_entry(
                    target, 'remove')
        elif event.newParent is None:
            # This was a recursive delete
            invalidation_transaction.register_entry(
                target, 'remove')
コード例 #20
0
    def upgrade(self, root, from_version, to_version, whitelist=None,
            blacklist=None):
        """Upgrade a root object from the from_version to the
        to_version.
        """
        if self.__in_process is True:
            raise ValueError(u"An upgrade process is already going on")
        log_stream = tempfile.NamedTemporaryFile()
        log_handler = logging.StreamHandler(log_stream)
        logger.addHandler(log_handler)
        try:
            logger.info(
                u'Upgrading from %s to %s.', from_version, to_version)
            notify(UpgradeStartedEvent(root, from_version, to_version))

            start = datetime.datetime.now()
            end = None
            versions = get_upgrade_chain(
                self.__registry.keys(), from_version, to_version)
            if not versions:
                logger.info(u'Nothing needs to be done.')
            process = UpgradeProcess(self, versions, whitelist=whitelist,
                blacklist=blacklist)

            if IRoot.providedBy(root):
                # First, upgrade Silva Root so Silva services /
                # extensions will be upgraded
                logger.info(
                    u'Upgrading root to versions %s.',
                    ', '.join(versions))
                process.upgrade_content(root)
                commit()

            # Now, upgrade site content
            logger.info(u'Upgrading content to version %s.', ', '.join(versions))
            process.upgrade_container(root, blacklist=['Silva Root',])
            process.post_upgrade()

            end = datetime.datetime.now()
            logger.info(
                u'Upgrade finished in %d seconds.', (end - start).seconds)
        finally:
            logger.removeHandler(log_handler)
            self.__in_process = False
        notify(UpgradeFinishedEvent(root, from_version, to_version, end is not None))
        log_stream.seek(0, 0)
        return log_stream
コード例 #21
0
    def _breadcrumbs(self, preview=False, skip=None):
        name = minimize(self._title(preview=preview))
        container = aq_parent(self.context)
        if skip is not None:
            while skip.providedBy(container):
                container = aq_parent(container)

        if (container is None or
            IRoot.providedBy(self.context) or
            self._virtual_root(self.context)):
            return ({'name': name, 'url': self.__str__()},)

        base = tuple()
        parent = queryMultiAdapter((container, self.request), IContentURL)
        if parent is not None:
            base = tuple(parent._breadcrumbs(preview, skip))

        if (not IDisableBreadcrumbTag.providedBy(self.context) and
            (not IContent.providedBy(self.context) or
             not self.context.is_default())):
            base += ({'name': name, 'url': self.__str__()},)

        return base
コード例 #22
0
    def run(self, root, options):
        target = root
        target_path = options.folder or options.content
        to_version = root.get_silva_software_version()
        from_version = options.version

        if target_path and not from_version:
            logger.error('You need to provide --from-version '
                         'to upgrade a folder or a content.')
            exit(3)
        if target_path:
            try:
                target = root.unrestrictedTraverse(target_path)
            except (KeyError, AttributeError):
                logger.error('Invalid content path %s.', target_path)
                exit(1)
        if not ISilvaObject.providedBy(target):
            logger.error('Content %s is not a Silva content.', target_path)
            exit(2)
        if not from_version:
            from_version = root.get_silva_content_version()
        logger.info("Upgrade from version %s to version %s." % (
                from_version, to_version))
        if options.content:
            registry.upgrade_content(
                target, from_version, to_version,
                whitelist=options.require_tags,
                blacklist=options.exclude_tags)
        else:
            registry.upgrade(
                target, from_version, to_version,
                whitelist=options.require_tags,
                blacklist=options.exclude_tags)
        if IRoot.providedBy(target):
            target._content_version = to_version
        transaction.commit()
コード例 #23
0
ファイル: actions.py プロジェクト: silvacms/zeam.form.silva
 def getRedirectedContent(self, form):
     content = form.context
     if not IRoot.providedBy(content):
         content = aq_parent(aq_inner(content))
     return content
コード例 #24
0
def is_installed(root, extension):
    return IRoot.providedBy(root)
コード例 #25
0
ファイル: addables.py プロジェクト: silvacms/silva.core.smi
 def update(self):
     if IRoot.providedBy(self.context):
         self.fields['acquire'].mode = silvaforms.DISPLAY
     else:
         self.fields['acquire'].mode = silvaforms.INPUT
コード例 #26
0
ファイル: settings.py プロジェクト: silvacms/silva.core.smi
 def available(self):
     if IRoot.providedBy(self.context):
         return False
     if not checkPermission('silva.ManageSilvaContent', self.context):
         return False
     return super(ContainerTypeForm, self).available()
コード例 #27
0
def unregister(version, event):
    # If we remove the root, we can't unregister
    if not IRoot.providedBy(event.object):
        service = getUtility(IContentLayoutService)
        service.unregister_page_model(version)
コード例 #28
0
ファイル: install.py プロジェクト: silvacms/Products.Silva
def is_installed(root, extension):
    return IRoot.providedBy(root)
コード例 #29
0
def configure_models(service, event):
    root = aq_parent(service)
    if event.oldParent is None and IRoot.providedBy(root):
        extension = extensionRegistry.get_extension('silva.core.contentlayout')
        extension.installer.configure_content(root, extension)