def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request

        if hasattr(context, 'route') and context.route.breadcrumbFactory:
            return context.route.breadcrumbFactory(context, request)

        # XXX this is the main part here:
        # to up 2 parents since the current context
        # is wrapped
        if IWrappedContext.providedBy(context):
            container = utils.parent(utils.parent(context))
        elif IFragmentContext.providedBy(context):
            container = getSite()
        name, item_url = get_view_url(context)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        base += ({'absolute_url': item_url,
                  'Title': utils.pretty_title_or_id(context, context)},)
        return base
Exemple #2
0
def reindex_filetype(obj, event):
    """ Reindex datatable and dataset parents filetype index on DataFile change
    """
    parent = utils.parent(obj)
    if IDatatable.providedBy(parent):
        parent.reindexObject(idxs=['filetype'])

    parent = utils.parent(parent)
    if IDataset.providedBy(parent):
        parent.reindexObject(idxs=['filetype'])
Exemple #3
0
 def _copyDocument(self, target_folder_obj, source_brain):
     """
     Copy utility
     """
     # TODO: transferLog fuellen und DB Eintraege loeschen
     # print source_brain.getId
     source_obj = source_brain.getObject()
     # determine parent folder for copy
     p = parent(source_obj)
     # if source_obj.getId() == 'ifinprojection.2012-08-08.4378013443':
     #    p._delOb('ifinprojection.2012-08-08.4378013443')
     #    return
     cb_copy_data = p.manage_copyObjects(source_obj.getId())
     result = target_folder_obj.manage_pasteObjects(cb_copy_data)
     # Now do some repairs
     if len(result) == 1:
         new_id = result[0]['new_id']
         copied_obj = target_folder_obj._getOb(new_id)
         mdate = source_obj.modified()
         copied_obj.scenarios = []
         wf_state = source_brain.review_state
         wftool = getToolByName(self, 'portal_workflow')
         # print wf_state, wftool.getInfoFor(copied_obj, 'review_state')
         if wf_state == "published" and wftool.getInfoFor(copied_obj, 'review_state') != 'published':
             wftool.doActionFor(copied_obj, 'publish')
         copied_obj.setModificationDate(mdate)
         events = source_obj.doc_extension(TRANSFERS_APP).transferEvents()
         copied_obj.transferLog = str(events)
         copied_obj.reindexObject()
         copied_obj.reindexObjectSecurity()
     else:
         log("Could not archive %s" % source_obj.absolute_url())
    def breadcrumbs(self):
        """Shows publications and their volumes and issues as plain text
        (without a link) if the user has no permission to view them."""
        context = aq_inner(self.context)
        pm = getToolByName(self.context, 'portal_membership')
        user = pm.getAuthenticatedMember()

        if IVolume.providedBy(context) or IIssue.providedBy(context):
            pub = IParentGetter(context).get_parent_object_of_type(
                "Publication")
            if user.has_permission('View', pub):
                return super(RecensioNavigationBreadcrumbs, self).breadcrumbs()
        elif user.has_permission('View', context):
            return super(RecensioNavigationBreadcrumbs, self).breadcrumbs()

        request = self.request
        container = utils.parent(context)
        view = getMultiAdapter(
            (container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())
        base += ({'absolute_url': '',
                  'Title': utils.pretty_title_or_id(context, context),
                  },
                 )
        return base
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
           and not rootPath.startswith(itemPath):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )
        return base
Exemple #6
0
    def navigationTreeRootPath(self):
        context = aq_inner(self.context)

        portal_properties = getToolByName(context, 'portal_properties')

        navtree_properties = getattr(portal_properties, 'navtree_properties')

        currentFolderOnlyInNavtree = navtree_properties.getProperty('currentFolderOnlyInNavtree', False)
        if currentFolderOnlyInNavtree:
            if context.restrictedTraverse('@@plone').isStructuralFolder():
                return '/'.join(context.getPhysicalPath())
            else:
                return '/'.join(utils.parent(context).getPhysicalPath())

        rootPath = getNavigationRoot(context)

        # Adjust for topLevel
        topLevel = navtree_properties.getProperty('topLevel', None)
        if topLevel is not None and topLevel > 0:
            contextPath = '/'.join(context.getPhysicalPath())
            if not contextPath.startswith(rootPath):
                return None
            contextSubPathElements = contextPath[len(rootPath)+1:].split('/')
            if len(contextSubPathElements) < topLevel:
                return None
            rootPath = rootPath + '/' + '/'.join(contextSubPathElements[:topLevel])

        return rootPath
Exemple #7
0
 def _purgeDocument(self, source_brain):
     """
     Delete utility
     """
     from docpool.elan.config import ELAN_APP
     from docpool.elan.behaviors.elandocument import IELANDocument
     source_obj = source_brain.getObject()
     # determine parent folder for copy
     scns = None
     try:
         scns = IELANDocument(source_obj).scenarios
     except:
         # Object could have lost its ELAN behavior but that means we can potentially delete it
         scns = ['dummy']
     if len(scns) == 1:  # only the one scenario --> potential delete
         # Check for other applications than ELAN
         apps = ILocalBehaviorSupport(source_obj).local_behaviors
         if apps and len(apps) > 1:  # There are others --> only remove ELAN behavior
             try:
                 apps.remove(ELAN_APP)
                 ILocalBehaviorSupport(source_obj).local_behaviors = list(set(apps))
             except Exception, e:
                 log_exc(e)
         else:  # we delete
             p = parent(source_obj)
             p.manage_delObjects([source_obj.getId()])
Exemple #8
0
    def navigationTreeRootPath(self):
        context = aq_inner(self.context)

        portal_properties = getToolByName(context, 'portal_properties')

        navtree_properties = getattr(portal_properties, 'navtree_properties')

        currentFolderOnlyInNavtree = navtree_properties.getProperty('currentFolderOnlyInNavtree', False)
        if currentFolderOnlyInNavtree:
            if context.restrictedTraverse('@@plone').isStructuralFolder():
                return '/'.join(context.getPhysicalPath())
            else:
                return '/'.join(utils.parent(context).getPhysicalPath())

        rootPath = getNavigationRoot(context)

        # Adjust for topLevel
        topLevel = navtree_properties.getProperty('topLevel', None)
        if topLevel is not None and topLevel > 0:
            contextPath = '/'.join(context.getPhysicalPath())
            if not contextPath.startswith(rootPath):
                return None
            contextSubPathElements = contextPath[len(rootPath)+1:].split('/')
            if len(contextSubPathElements) < topLevel:
                return None
            rootPath = rootPath + '/' + '/'.join(contextSubPathElements[:topLevel])

        return rootPath
Exemple #9
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)
        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        if container is None:
            return ({'absolute_url': item_url,
                     'Title': utils.pretty_title_or_id(context, context),
                    },)

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation root
        if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath):
            base += ({'absolute_url': _checkPermission('View', context) and item_url or None,
                      'Title': utils.pretty_title_or_id(context, context),
                     },)

        return base
Exemple #10
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return ({'absolute_url': item_url,
                     'Title': utils.pretty_title_or_id(context, context), },
                   )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation root
        if not utils.isDefaultPage(context, request) and not rootPath.startswith(itemPath):
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(context, context), },
                    )

        return base
Exemple #11
0
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu,
                                    name='plone_contentmenu_factory',
                                    context=self.context).getMenuItems(
                                        self.context, self.request)
        factories = []
        for item in factories_menu:
            if item.get('title') == 'folder_add_settings':
                continue
            title = item.get('title', '')
            factories.append({
                'id':
                item.get('id'),
                'title':
                title and translate(title, context=self.request) or '',  # noqa
                'action':
                item.get('action')
            })

        context = aq_inner(self.context)
        crumbs = []
        top_site = get_top_site_from_url(self.context, self.request)
        while not context == top_site:
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        self.request.response.setHeader('Content-Type',
                                        'application/json; charset=utf-8')
        return json_dumps({
            'addButtons': factories,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
Exemple #12
0
def sourceTitle(obj, **kwargs):
    """ Get source for catalog index """
    if not IRSSNewsItem.providedBy(obj):
        raise AttributeError

    found = False
    myparent = parent(obj)
    for _back in range(0, 5):
        if IRSSServer.providedBy(myparent):
            found = True
            break
        myparent = parent(myparent)

    if not found:
        raise AttributeError

    return myparent.title_or_id()
Exemple #13
0
def getNextChildSite(context, portal):
    """Returns the nearest parent object implementing IChildSite.
    Code borrowed from plone.app.layout.navigation.root.getNavigationRootObject
    """
    obj = context
    while not IChildSite.providedBy(obj) and\
            aq_base(obj) is not aq_base(portal):
        obj = utils.parent(obj)
    return obj
Exemple #14
0
    def breadcrumbs(self):
        real_context = aq_inner(self.context)
        request_path = self.request.get('PATH_INFO', '')

        if 'VirtualHostBase' in request_path:
            path = ('',) + re.search(r'VirtualHostBase/\w+/.*?/(.*?)/VirtualHostRoot/(.*)', request_path).groups()

            request_path = '/'.join(path)
        context_path = '/'.join(real_context.getPhysicalPath())

        if request_path == context_path:
            context = real_context
        else:
            self.context.plone_log(request_path)
            parent_path = request_path[:request_path.rfind('/')]
            self.context.plone_log(parent_path)
            context = self.context.restrictedTraverse(parent_path)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)

        if container is None:
            return (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
            )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
                and not rootPath.startswith(itemPath):
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(context, context), },
                     )

        if request_path != context_path:
            name, item_url = get_view_url(real_context)
            base += ({'absolute_url': item_url,
                      'Title': utils.pretty_title_or_id(real_context, real_context), },
                     )

        return base
        return True
Exemple #15
0
def getNavigationRootObject(context, portal):
    if context is None:
        return None

    obj = context
    while (not INavigationRoot.providedBy(obj) and
            aq_base(obj) is not aq_base(portal)):
        obj = utils.parent(obj)
    return obj
Exemple #16
0
    def __call__(self):
        factories_menu = getUtility(
            IBrowserMenu, name='plone_contentmenu_factory',
            context=self.context).getMenuItems(self.context, self.request)
        factories = []
        for item in factories_menu:
            if item.get('title') == 'folder_add_settings':
                continue
            title = item.get('title', '')
            factories.append({
                'id': item.get('id'),
                'title': title and translate(title, context=self.request) or '',  # noqa
                'action': item.get('action')
                })

        context = aq_inner(self.context)
        crumbs = []
        top_site = get_top_site_from_url(self.context, self.request)
        while not context == top_site:
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        self.request.response.setHeader(
            'Content-Type', 'application/json; charset=utf-8'
        )
        return json_dumps({
            'addButtons': factories,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
Exemple #17
0
    def navigationRootUrl(self):
        """ Root URL
        """
        ntool = getToolByName(self.context, 'portal_navigationmanager')
        parent = utils.parent(ntool)

        portal_state = getMultiAdapter((parent, self.request),
                                       name=u'plone_portal_state')

        return portal_state.navigation_root_url()
    def navigationRootUrl(self):
        """ Root URL
        """
        ntool = getToolByName(self.context, 'portal_navigationmanager')
        parent = utils.parent(ntool)

        portal_state = getMultiAdapter(
            (parent, self.request), name=u'plone_portal_state')

        return portal_state.navigation_root_url()
Exemple #19
0
def getNextChildSite(context, portal):
    """Returns the nearest parent object implementing IChildSite.
    Code borrowed from plone.app.layout.navigation.root.getNavigationRootObject
    """
    obj = context
    while not IChildSite.providedBy(obj) and aq_base(obj) is not aq_base(portal):
        obj = utils.parent(obj)
        if obj is None:
            return
    return obj
Exemple #20
0
 def getEbook(self):
     """ Retrieve the Ebook
     """
     obj = self.context
     portal_url = getToolByName(obj, 'portal_url')
     portal = portal_url.getPortalObject()
     while not IImportedBook.providedBy(obj) \
             and aq_base(obj) is not aq_base(portal):
         obj = utils.parent(obj)
     return obj
 def migrate(self):
     f = parent(self)
     if hasattr(self, '_setPortalTypeName'):
         self._setPortalTypeName("DPTransfers")
     myid = self.getId()
     del f[myid]
     self.__class__ = DPTransferFolder
     f[myid] = self
     logger.info(self.__class__)
     logger.info(self.getPortalTypeName())
    def __call__(self):
        portal_url = getToolByName(self.context, 'portal_url')

        portal = portal_url.getPortalObject()
        obj = self.context
        while not (INavigationRoot.providedBy(obj)
                   and aq_base(obj) is not aq_base(portal)):
            obj = utils.parent(obj)

        return self.portlets(obj)
Exemple #23
0
 def getEbook(self):
     """ Retrieve the Ebook
     """
     obj = self.context
     portal_url = getToolByName(obj, 'portal_url')
     portal = portal_url.getPortalObject()
     while not IImportedBook.providedBy(obj) \
             and aq_base(obj) is not aq_base(portal):
         obj = utils.parent(obj)
     return obj
 def disabled(self):
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context.objectIds():
         return False
     else:
         return True
    def __call__(self):
        portal_url = getToolByName(self.context, 'portal_url')

        portal = portal_url.getPortalObject()
        obj = self.context
        while not (INavigationRoot.providedBy(obj) and
                           aq_base(obj) is not aq_base(portal)):
            obj = utils.parent(obj)

        return self.portlets(obj)
 def _findNavRoots(self, navroot, portal):
     """Find all the nav roots going up the tree
     """
     navroot_ids = []
     while True:
         if navroot.meta_type == 'Plone Site':
             break
         navroot_ids.append(navroot.getId())
         navroot = getNavigationRootObject(utils.parent(navroot), portal)
     navroot_ids.reverse()
     return navroot_ids
def getApplicationRoot(obj):
    """ Application Root
    """
    portal_url = getToolByName(obj, 'portal_url')
    portal = portal_url.getPortalObject()

    while not INavigationRoot.providedBy(obj) and (
        aq_base(obj) is not aq_base(portal)):
        obj = utils.parent(obj)

    return obj
def getApplicationRoot(obj):
    """ Returns root of application for given object
    """
    portal_url = getToolByName(obj, 'portal_url')
    portal = portal_url.getPortalObject()

    while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \
                                            is not aq_base(portal):
        obj = utils.parent(obj)

    return obj
def getApplicationRoot(obj):
    """ Returns root of application for given object
    """
    portal_url = getToolByName(obj, 'portal_url')
    portal = portal_url.getPortalObject()

    while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \
                                            is not aq_base(portal):
        obj = utils.parent(obj)

    return obj
Exemple #30
0
 def disabled(self):
     # As we don't have the view we need to parse the url to see
     # if its folder_contents
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context.objectIds():
         return False
     else:
         return True
Exemple #31
0
 def __init__(self, context):
     self.context = context
     annotations = IAnnotations(context.getCanonical())
     mapping = annotations.get(KEY)
     if mapping is None:
         mapping = annotations[KEY] = PersistentDict({'locations': []})
     self.mapping = mapping
     self.is_external = False
     if isDefaultPage(context, context.REQUEST):
         self.url = parent(context).absolute_url()
     else:
         self.url = context.absolute_url()
Exemple #32
0
 def migrate(self):
     request = self.REQUEST
     alsoProvides(request, IDisableCSRFProtection)
     f = parent(self)
     if hasattr(self, '_setPortalTypeName'):
         self._setPortalTypeName("DPEvent")
     myid = self.getId()
     del f[myid]
     self.__class__ = DPEvent
     f[myid] = self
     logger.info(self.__class__)
     logger.info(self.getPortalTypeName())
 def disabled(self):
     if IContentsPage.providedBy(self.request):
         return True
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context.objectIds():
         return False
     else:
         return True
Exemple #34
0
 def disabled(self):
     if IContentsPage.providedBy(self.request):
         return True
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context:
         return False
     else:
         return True
Exemple #35
0
 def disabled(self):
     # As we don't have the view we need to parse the url to see
     # if its folder_contents
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context.objectIds():
         return False
     else:
         return True
Exemple #36
0
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu, name="plone_contentmenu_factory", context=self.context).getMenuItems(
            self.context, self.request
        )
        factories = []
        for item in factories_menu:
            if item.get("title") == "folder_add_settings":
                continue
            title = item.get("title", "")
            factories.append(
                {
                    "id": item.get("id"),
                    "title": title and translate(title, context=self.request) or "",
                    "action": item.get("action"),
                }
            )

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({"id": context.getId(), "title": utils.pretty_title_or_id(context, context)})
            context = utils.parent(context)

        catalog = getToolByName(self.context, "portal_catalog")
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = "/".join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == "path":
                    attr = "getPath"
                val = getattr(obj, attr, None)
                if callable(val):
                    val = val()
                if key == "path":
                    val = val[len(base_path) :]
                item[key] = val
        return json_dumps(
            {
                "addButtons": factories,
                "defaultPage": self.context.getDefaultPage(),
                "breadcrumbs": [c for c in reversed(crumbs)],
                "object": item,
            }
        )
 def _getFoldersToRoot(self):
     """ Return the root of our application.
     """
     portal_url = getToolByName(self.context, 'portal_url')
     portal = portal_url.getPortalObject()
     obj = self.context
     folders = []
     while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \
                                             is not aq_base(portal):
         folders.append(obj.getId())
         obj = putils.parent(obj)
     folders.reverse()
     return folders
 def _getFoldersToRoot(self):
     """ Return the root of our application.
     """
     portal_url = getToolByName(self.context, 'portal_url')
     portal = portal_url.getPortalObject()
     obj = self.context
     folders = []
     while not IEEAWebApplication.providedBy(obj) and aq_base(obj) \
                                             is not aq_base(portal):
         folders.append(obj.getId())
         obj = putils.parent(obj)
     folders.reverse()
     return folders
    def navigation_root_url(self):
        """ Override navigation root to portal url
        """
        parent = aq_inner(self.context)
        plt = getToolByName(parent, 'portal_languages')
        while not ISiteRoot.providedBy(parent):
            parent = utils.parent(parent)

        lang = ""
        if plt.getPreferredLanguage() != "en":
            lang = plt.getPreferredLanguage()

        return parent.absolute_url() + "/" + lang
Exemple #40
0
    def navigation_root_url(self):
        """ Override navigation root to portal url
        """
        parent = aq_inner(self.context)
        plt = getToolByName(parent, 'portal_languages')
        while not ISiteRoot.providedBy(parent):
            parent = utils.parent(parent)

        lang = ""
        if plt.getPreferredLanguage() != "en":
            lang = plt.getPreferredLanguage()

        return parent.absolute_url() + "/" + lang
Exemple #41
0
def ban_for_message(obj, event):
    portal = api.portal.get()
    portal_url = portal.absolute_url()
    domain = urlparse(portal_url).netloc
    if domain.startswith("www."):
        domain = domain[4:]
    headers = {"Host": domain}
    ban_url = portal_url
    container = parent(obj)
    if container.portal_type != "MessagesConfig":
        # we are on a local banner, ban only its container path
        ban_url = container.absolute_url()
    requests.request("BAN", ban_url, headers=headers)
Exemple #42
0
    def breadcrumbs(self):
        context = aq_inner(self.context)

        view_utils = Utils(self.context, self.request)

        crumbs = []
        while context is not None:
            if ISiteRoot.providedBy(context):
                break

            try:
                if utils.isDefaultPage(context, self.request):
                    context = utils.parent(context)
                    continue
            except AttributeError:
                break

            # Some things want to be hidden from the breadcrumbs
            if IHideFromBreadcrumbs.providedBy(context):
                context = utils.parent(context)
                continue

            item_url = view_utils.get_object_url(context)
            try:
                state = api.content.get_state(obj=context)
            except WorkflowException:
                state = None
            label = getattr(context, 'navigation_label', None)
            if not label:
                label = utils.pretty_title_or_id(context, context)
            crumbs.append({
                'absolute_url': item_url,
                'Title': label,
                'state': state
            })
            context = utils.parent(context)

        return list(reversed(crumbs))
 def _getRoot(self):
     """ Returns root of submenu.
     """
     if not putils.base_hasattr(self, '_root'):
         portal_url = getToolByName(self.context, 'portal_url')
         portal = portal_url.getPortalObject()
         obj = self.context
         while  aq_base(obj) is not aq_base(portal):
             parent = putils.parent(obj)
             if IEEAWebApplication.providedBy(parent):
                 break
             obj = parent
         self._root = [obj]
     return self._root[0]
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request

        # XXX this is the main part here:
        # to up 2 parents since the current context
        # is wrapped
        container = utils.parent(utils.parent(context))
        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        base += ({'absolute_url': item_url,
                  'Title': utils.pretty_title_or_id(context, context)},)
        return base
 def disabled(self):
     if IContentsPage.providedBy(self.request):
         return True
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     # By default an index_html signals disabled Display Menu, we don't want
     # that, so we return False, not disabled, by default
     elif 'index_html' in context:
         return False
     else:
         return False
Exemple #46
0
    def __call__(self):
        factories_menu = getUtility(IBrowserMenu,
                                    name='plone_contentmenu_factory',
                                    context=self.context).getMenuItems(
                                        self.context, self.request)
        factories_menu = [
            m for m in factories_menu
            if m.get('title') != 'folder_add_settings'
        ]

        context = aq_inner(self.context)
        crumbs = []
        while not IPloneSiteRoot.providedBy(context):
            crumbs.append({
                'id': context.getId(),
                'title': utils.pretty_title_or_id(context, context)
            })
            context = utils.parent(context)

        catalog = getToolByName(self.context, 'portal_catalog')
        try:
            brains = catalog(UID=IUUID(self.context))
        except TypeError:
            brains = []
        item = None
        if len(brains) > 0:
            obj = brains[0]
            # context here should be site root
            base_path = '/'.join(context.getPhysicalPath())
            item = {}
            for attr in self.attributes:
                key = attr
                if key == 'path':
                    attr = 'getPath'
                val = getattr(obj, attr, None)
                if callable(val):
                    if attr in _safe_callable_metadata:
                        val = val()
                    else:
                        continue
                if key == 'path':
                    val = val[len(base_path):]
                item[key] = val

        return json.dumps({
            'addButtons': factories_menu,
            'defaultPage': self.context.getDefaultPage(),
            'breadcrumbs': [c for c in reversed(crumbs)],
            'object': item
        })
 def _getRoot(self):
     """ Returns root of submenu.
     """
     if not putils.base_hasattr(self, '_root'):
         portal_url = getToolByName(self.context, 'portal_url')
         portal = portal_url.getPortalObject()
         obj = self.context
         while aq_base(obj) is not aq_base(portal):
             parent = putils.parent(obj)
             if IEEAWebApplication.providedBy(parent):
                 break
             obj = parent
         self._root = [obj]
     return self._root[0]
Exemple #48
0
def getSubsiteRoot(context, relativeRoot=None):
    """Get the path to the root of the navigation tree. If context or one of
    its parents until (but not including) the portal root implements
    ISubsiteEnhanced, return this.

    Otherwise, if an explicit root is set in navtree_properties or given as
    relativeRoot, use this. If the property is not set or is set to '/', use
    the portal root.
    """

    portal_url = getToolByName(context, 'portal_url')

    if not relativeRoot:
        portal_properties = getToolByName(context, 'portal_properties')
        navtree_properties = getattr(portal_properties, 'navtree_properties')
        relativeRoot = navtree_properties.getProperty('root', None)

    portal = portal_url.getPortalObject()
    obj = context
    while (not ISubsiteEnhanced.providedBy(obj)
           and aq_base(obj) is not aq_base(portal)):
        # XXX a bit ugly: if this method is called with a context from inside
        # the portal_factory, we cannot use the parent() method, as it calls
        # aq_parent on aq_inner of the object. This directly returns the main
        # portal
        if IFactoryTool.providedBy(obj):
            obj = aq_parent(obj)
        else:
            obj = utils.parent(obj)
    if (ISubsiteEnhanced.providedBy(obj)
        and aq_base(obj) is not aq_base(portal)):
        return '/'.join(obj.getPhysicalPath())

    rootPath = relativeRoot
    portalPath = portal_url.getPortalPath()
    # contextPath = '/'.join(context.getPhysicalPath())

    if rootPath:
        if rootPath == '/':
            return portalPath
        else:
            if len(rootPath) > 1 and rootPath[0] == '/':
                return portalPath + rootPath
            else:
                return portalPath

    # Fall back on the portal root
    if not rootPath:
        return portalPath
    def getMenuItems(self, obj, request):
        """Return menu item entries in a TAL-friendly form."""
        context_state = getMultiAdapter((obj, request), name='plone_context_state')
        isDefaultPage = context_state.is_default_page()

        parent = None

        folder = None
        context = None

        # If this is a default page, also get menu items relative to the parent
        if isDefaultPage:
            parent = utils.parent(obj)
            folder = ISelectableBrowserDefault(parent, None)

        context = ISelectableBrowserDefault(obj, None)

        folderResults = self._getMenuItemsForContext(folder, request)

        contextResults = []
        if isDefaultPage or context_state.is_structural_folder():
            contextResults = self._getMenuItemsForContext(context, request)

        results = []
        if len(folderResults) > 0 and len(contextResults) > 0:
            results.append({ 'title'       : _(u'label_current_folder_add', default=u'Add in Folder'),
                             'description' : '',
                             'action'      : None,
                             'selected'    : False,
                             'icon'        : None,
                             'extra'       : {'id': 'folderHeader', 'separator': 'actionSeparator', 'class': ''},
                             'submenu'     : None,
                             })
            results.extend(folderResults)
            results.append({ 'title'       : _(u'label_current_item_add', default=u'Add in Item'),
                             'description' : '',
                             'action'      : None,
                             'selected'    : False,
                             'icon'        : None,
                             'extra'       : {'id': 'contextHeader', 'separator': 'actionSeparator', 'class': ''},
                             'submenu'     : None,
                             })
            results.extend(contextResults)

        else:
            results.extend(folderResults)
            results.extend(contextResults)

        return results
Exemple #50
0
 def disabled(self):
     # As we don't have the view we need to parse the url to see
     # if its folder_contents
     if 'folder_contents' in self.request.getURL().split('/'):
         return True
     if IContentsPage.providedBy(self.request):
         return True
     context = self.context
     if self.context_state.is_default_page():
         context = utils.parent(context)
     if not getattr(context, 'isPrincipiaFolderish', False):
         return False
     elif 'index_html' not in context.objectIds():
         return False
     else:
         return True
    def disabled(self):
        if IContentsPage.providedBy(self.request):
            return True
        context = self.context

        if self.context_state.is_default_page():
            context = utils.parent(context)

        if not getattr(context, 'isPrincipiaFolderish', False):
            return False
        # By default an index_html signals disabled Display Menu, we don't want
        # that, so we return False, not disabled, by default
        elif 'index_html' in context:
            return False
        else:
            return False
Exemple #52
0
    def available(self):
        if self.disabled():
            return False

        isDefaultPage = self.context_state.is_default_page()

        folder = None
        context = None

        folderLayouts = []
        contextLayouts = []

        # If this is a default page, also get menu items relative to the parent
        if isDefaultPage:
            folder = ISelectableBrowserDefault(utils.parent(self.context),
                                               None)

        context = ISelectableBrowserDefault(self.context, None)

        folderLayouts = []
        folderCanSetLayout = False
        folderCanSetDefaultPage = False

        if folder is not None:
            folderLayouts = folder.getAvailableLayouts()
            folderCanSetLayout = folder.canSetLayout()
            folderCanSetDefaultPage = folder.canSetDefaultPage()

        contextLayouts = []
        contextCanSetLayout = False
        contextCanSetDefaultPage = False

        if context is not None:
            contextLayouts = context.getAvailableLayouts()
            contextCanSetLayout = context.canSetLayout()
            contextCanSetDefaultPage = context.canSetDefaultPage()

        # Show the menu if we either can set a default-page, or we have more
        # than one layout to choose from.
        if (folderCanSetDefaultPage) or \
           (folderCanSetLayout and len(folderLayouts) > 1) or \
           (folder is None and contextCanSetDefaultPage) or \
           (contextCanSetLayout and len(contextLayouts) > 1):
            return True
        else:
            return False
Exemple #53
0
def getInterfaceRoot(context, interface):
    """Climb up the folder hierarchy and
       find an object that implements ISearchRoot
    """

    portal_url = getToolByName(context, 'portal_url')

    portal = portal_url.getPortalObject()
    object = context

    while not interface.providedBy(object) and \
            aq_base(object) is not aq_base(portal):
        object = utils.parent(object)
    if interface.providedBy(object) and \
            aq_base(object) is not aq_base(portal):
        return object
    else:
        return aq_base(portal)
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        name, item_url = get_view_url(context)
        if container is None:
            return (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
                )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            if container.portal_type == "Scheda" and utils.isDefaultPage(container, request):
                # if the parent is a Scheda and is set as default page, it
                # doesn't appears in the breadcrums, so we need to use context
                # absolute_url instead simple concatenation
                item_url = context.absolute_url()
            else:
                item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        rootPath = getNavigationRoot(context)
        itemPath = '/'.join(context.getPhysicalPath())

        # don't show default pages in breadcrumbs or pages above the navigation
        # root
        if not utils.isDefaultPage(context, request) \
                and not rootPath.startswith(itemPath):
            base += (
                {'absolute_url': item_url,
                 'Title': utils.pretty_title_or_id(context, context), },
                )

        return base
Exemple #55
0
 def breadcrumbs(self):
     path = self.request.get('path')
     portal = self.navigation_root
     if path is None:
         context = portal
     else:
         context = portal.restrictedTraverse(unquote(path))
     crumbs = []
     context = aq_inner(context)
     while context is not None:
         if not IHideFromBreadcrumbs.providedBy(context):
             crumbs.append({
                 'path': "/".join(context.getPhysicalPath()),
                 'url': context.absolute_url(),
                 'title': context.title_or_id()
             })
         if INavigationRoot.providedBy(context):
             break
         context = utils.parent(context)
     crumbs.reverse()
     return crumbs
Exemple #56
0
    def breadcrumbs(self):
        """ Breadcrumbs
        """
        if ISiteRoot.providedBy(self.context):
            return ()

        context = aq_inner(self.context)
        request = self.request
        container = utils.parent(context)

        try:
            name, item_url = get_view_url(context)
        except AttributeError:
            print context
            raise

        if container is None:
            return ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

        view = getMultiAdapter((container, request), name='breadcrumbs_view')
        base = tuple(view.breadcrumbs())

        # Some things want to be hidden from the breadcrumbs
        if IHideFromBreadcrumbs.providedBy(context):
            return base

        if base:
            item_url = '%s/%s' % (base[-1]['absolute_url'], name)

        # don't show default pages in breadcrumbs
        if not utils.isDefaultPage(context, request):
            base += ({
                'absolute_url': item_url,
                'Title': utils.pretty_title_or_id(context, context),
            }, )

        return base
Exemple #57
0
    def breadcrumbs(self):
        context = aq_inner(self.context)
        request = self.request
        ct = getToolByName(context, 'portal_catalog')
        query = {}

        # Check to see if the current page is a folder default view, if so
        # get breadcrumbs from the parent folder
        if utils.isDefaultPage(context, request):
            currentPath = '/'.join(utils.parent(context).getPhysicalPath())
        else:
            currentPath = '/'.join(context.getPhysicalPath())
        query['path'] = {'query': currentPath, 'navtree': 1, 'depth': 0}

        rawresult = ct(**query)

        # Sort items on path length
        dec_result = [(len(r.getPath()), r) for r in rawresult]
        dec_result.sort()

        rootPath = getNavigationRoot(context)

        # Build result dict
        result = []
        for r_tuple in dec_result:
            item = r_tuple[1]

            # Don't include it if it would be above the navigation root
            itemPath = item.getPath()
            if rootPath.startswith(itemPath):
                continue

            id, item_url = get_view_url(item)
            data = {
                'Title': utils.pretty_title_or_id(context, item),
                'absolute_url': item_url
            }
            result.append(data)
        return result