Example #1
0
    def _get_root_content_url(self):
        # Redirect to the root of the SMI if we are not already
        site = IVirtualSite(self.request)
        settings = getUtility(IUIService)
        if settings.smi_access_root:
            top_level = site.get_silva_root()
        else:
            top_level = site.get_root()

        # We lookup for the highest container where we have access
        root = self.context.get_container()
        while root != top_level:
            parent = root.get_real_container()
            if parent is None or not checkPermission("silva.ReadSilvaContent", parent):
                # We don't have access at that level
                break
            root = parent
        return getMultiAdapter((root, self.request), IContentURL)
Example #2
0
    def update(self):
        # Redirect to the root of the SMI if we are not already
        site = IVirtualSite(self.request)
        settings = getUtility(IUIService)
        if settings.smi_access_root:
            top_level = site.get_silva_root()
        else:
            top_level = site.get_root()

        # We lookup for the highest container where we have access
        root = self.context.get_container()
        while root != top_level:
            parent = root.get_real_container()
            if (parent is None or
                    not checkPermission('silva.ReadSilvaContent', parent)):
                # We don't have access at that level
                break
            root = parent

        root_content_url = getMultiAdapter((root, self.request), IContentURL)
        root_url = root_content_url.url()
        if root != self.context:
            # Relative path of the content from the root.
            content_url = getMultiAdapter(
                (self.context, self.request), IContentURL)
            root_path = root_content_url.url(relative=True).split('/')
            content_path = content_url.url(relative=True).split('/')
            path = '/'.join(relative_path(root_path, content_path))

            raise Redirect('/'.join((root_url, 'edit')) + '#!' + path)

        # Set the proper SMI skin
        set_smi_skin(self.context, self.request)

        # Load the extensions
        for load_entry in iter_entry_points('silva.ui.resources'):
            resource = load_entry.load()
            need(resource)

        # Customization from service
        if settings.logo is not None:
            settings_content_url = getMultiAdapter(
                (settings, self.request), IContentURL)
            self.logo_url = '/'.join((settings_content_url.url(), 'logo'))
        else:
            self.logo_url = self.static['img']['silva.png']()
        self.background = '#7996ac'
        self.name = settings.name
        self.listing_preview = settings.folder_icon_preview
        self.maintenance_message = settings.maintenance_message
        self.test_mode = settings.test_mode
        self.preview_resolutions = []
        self.notifications_life = settings.notifications_life
        if settings.preview_use_resolutions:
            self.preview_resolutions = list(settings.preview_resolutions)
        if settings.background:
            self.background = settings.background

        # Prepare values for template
        languages = IUserPreferredLanguages(
            self.request).getPreferredLanguages()

        self.language = languages[0] if languages else 'en'
        self.root_url = root_url
        self.can_manage = getSecurityManager().checkPermission(
            'View Management Screens', self.context)