Пример #1
0
    def fullNumber(self, value):
        if IDraftedContent.providedBy(self):
            location = self.__parent__.getLocation()
            parents = filter(IUserManual.providedBy, [location] + getParents(location))
        else:
            parents = filter(IUserManual.providedBy, getParents(self))
        manual = parents[-1]
        numbers = map(int, value.split('.'))
        ct = getUtility(IContentType, name='content.usermanualpage')
        del self.__parent__[self.__name__]
        for number in numbers[0:-1]:
            try:
                manual = IOrder(manual).getByPosition(number)
            except KeyError:
                m = ct.create(_(u'Autocreated page'), _(u'Autocreated page description'))
                m.number = number
                ct.__bind__(manual).add(m)
                manual = m
        self.number = numbers[-1]
        manual[INameChooser(manual).chooseName(self.__name__, self)] = self
        IOrder(self.__parent__).rebuild()

        if IUserManualPage.providedBy(self.__parent__):
            return '%s.%s'%(self.__parent__.fullNumber, self.number)
        return str(self.number)
Пример #2
0
 def getItemParentThreads(item):
     res = []
     parents = []
     for parent in [item]+getParents(item):
         for shortcut in IShortcuts(parent, {}).items():
             res.append(parents + [shortcut]+ getParents(shortcut))
         parents.append(parent)
     res.append(parents)
     def getUrl(items):
         items = filter(lambda y: not ISite.providedBy(y), items)
         items.reverse()
         return "%s/%s"%(absoluteURL(items[0], request), "/".join(map(lambda x: x.__name__, items[1:])))
     return map(lambda x: getUrl(x), res)
Пример #3
0
 def getServicePath(self):
     path = [
         parent.__name__ for parent in getParents(self) if parent.__name__
     ]
     path.reverse()
     path.append(self.__name__)
     return path
Пример #4
0
def evolve(context):
    root = getRootFolder(context)
    old_site = getSite()
    for site in findObjectsMatching(root, ISite.providedBy):
        setSite(site)
        try:
            for shortcut in list(findObjectsMatching(site, IShortcut.providedBy)):
                print 'updating shortcut', shortcut
                try:
                    getParents(shortcut.raw_target)
                except TypeError:
                    try:
                        objectRemoved(shortcut.raw_target, None)
                    except ComponentLookupError:
                        pass
        finally:
            setSite(old_site)
Пример #5
0
 def getId(self):
     context = self.context
     if not context.__name__:
         # always try to be unique
         return str(id(context))
     parents = [context.__name__]
     parents += [parent.__name__ for parent in getParents(context)
                 if parent.__name__]
     return '\\'.join(parents)
    def getTitle(self, content):
        def itemtitle(i):
            item = IItem(i, None)
            if item is None:
                return i.__name__
            else:
                return u"%s (%s)" % (item.title, i.__name__)

        items = filter(lambda x: x.__name__ is not None, reversed([content] + getParents(content)))
        return "/".join(map(itemtitle, items))
Пример #7
0
    def __init__(self, context, request, view, manager=None):
        context = removeSecurityProxy(context)
        objects = []
        vhr = request.getVirtualHostRoot()
        try:
            parents = [context] + list(getParents(context))
        except:
            site = getSite()
            parents = [site] + list(getParents(site))

        for obj in parents:
            objects.append(obj)
            if sameProxiedObjects(obj, vhr) or isinstance(obj, Exception):
                break

        objects.reverse()
        self.objects = objects

        super(BreadcrumbsViewlet, self).__init__(
            context, request, view, manager)
Пример #8
0
    def update(self, instance):
        global tagging

        name = u'portlet:%s'%instance.__name__
        value = self.genValue()

        # update self
        tagging.update(name, value, instance.context)

        # update in parents
        for context in getParents(instance.context):
            tagging.update(name, value, context)
Пример #9
0
    def findObjectsProviding(root):
        if ISite.providedBy(root):
            yield root
        
        try:
            if len(getParents(root)) > 3:
                raise StopIteration()
        except TypeError:
            raise StopIteration()

        values = getattr(root, 'values', None)
        if callable(values):
            for subobj in values():
                for match in findObjectsProviding(subobj):
                    yield match
Пример #10
0
    def findObjectsProviding(root):
        if ISite.providedBy(root):
            yield root

        try:
            if len(getParents(root)) > 3:
                raise StopIteration()
        except TypeError:
            raise StopIteration()

        values = getattr(root, 'values', None)
        if callable(values):
            for subobj in values():
                for match in findObjectsProviding(subobj):
                    yield match
Пример #11
0
    def _get_values(self, value, includeValue=False):
        try:
            intid = getUtility(IIntIds)
            parents = getParents(value)
        except:
            return None

        if includeValue:
            parents.append(value)

        ids = []
        for ob in parents:
            id = intid.queryId(removeAllProxies(ob))
            if id is not None:
                ids.append(id)

        if ids:
            return ids
        else:
            return None
Пример #12
0
    def __call__(self):
        root = IPhysicallyLocatable(self.context).getNearestSite()
        parents = getParents(self.context)

        # remove all parents below the first found site
        while parents[-1] != root:
            parents.pop()

        parents.pop() #remove Site from parents
        parents.reverse()

        parentSiblings = [ sorted( [
            {'name':IEntryNav(sibling).getEntryMenuName(),
             'order':IEntryNav(sibling).getEntryMenuOrder(),
             'url':absoluteURL(sibling, self.request),
             'active':((sibling in parents) and 'parent') or False}
            for sibling in IEntryNav(item).getSiblings() ] ,
                                key=itemgetter('order')) for item in parents ]

        mySiblings = sorted( [
            {'name':IEntryNav(sibling).getEntryMenuName(),
             'order':IEntryNav(sibling).getEntryMenuOrder(),
             'url':absoluteURL(sibling, self.request),
             'active':((sibling == self.context) and 'self') or False} \
            for sibling in IEntryNav(self.context).getSiblings() ] ,
                             key=itemgetter('order')) 

        
        children = sorted( [
            {'name':IEntryNav(child).getEntryMenuName(),
             'order':IEntryNav(child).getEntryMenuOrder(),
             'url':absoluteURL(child, self.request) }
            for child in IEntryNav(self.context).getChildren() ],
                           key=itemgetter('order'))
        
        parentSiblings.append(mySiblings)
        
        if len(children):
            parentSiblings.append(children)

        return parentSiblings
Пример #13
0
    def __call__(self, context):
        terms = []
        ids = getUtility(IIntIds)
        site = getSite()
        try:
            for i in [site] + getParents(site):
                if not ISite.providedBy(i):
                    continue
                setSite(i)
                fields = getUtility(IProfileFields)
                for name, field in fields.items():
                    id  = ids.getId(field)
                    path = getPath(i)[1:]
                    if path:
                        path += '/'
                    terms.append((path+IItem(field).title, id))

            terms.sort()
            return Vocabulary(
                [SimpleTerm(name, name, title) for title, name in terms])
        finally:
            setSite(site)
Пример #14
0
 def getURL(self, item):
     request = self.request
     try:
         parents = getParents(item)
     except TypeError:
         return '#'
     def getItemParentThreads(item):
         res = []
         parents = []
         for parent in [item]+getParents(item):
             for shortcut in IShortcuts(parent, {}).items():
                 res.append(parents + [shortcut]+ getParents(shortcut))
             parents.append(parent)
         res.append(parents)
         def getUrl(items):
             items = filter(lambda y: not ISite.providedBy(y), items)
             items.reverse()
             return "%s/%s"%(absoluteURL(items[0], request), "/".join(map(lambda x: x.__name__, items[1:])))
         return map(lambda x: getUrl(x), res)
     contextURL = absoluteURL(self.context, self.request)
     try:
         return filter(lambda x: contextURL in x, getItemParentThreads(item))[0]
     except IndexError:
         return absoluteURL(item, request)
Пример #15
0
    def singleBranchTree(self, root=''):
        """Return an XML document with the siblings and parents of an object.

        There is only one branch expanded, in other words, the tree is
        filled with the object, its siblings and its parents with
        their respective siblings.

        """
        result = 'selected'
        oldItem = self.context

        vh = self.request.getVirtualHostRoot()
        if vh:
            vhrootView = getMultiAdapter(
                    (vh, self.request), name='absolute_url')
            baseURL = vhrootView() + '/'
            try:
                rootName = '[' + vh.__name__ + ']'
            except:
                # we got the containment root itself as the virtual host
                # and there is no name.
                rootName = _('[top]')
            parents = getParentsFromContextToObject(self.context, vh)
        else:
            rootName = _('[top]')
            baseURL = self.request.getApplicationURL() + '/'
            parents = getParents(self.context)

        rootName = translate(rootName, context=self.request, default=rootName)

        for item in parents:
            # skip skin if present
            #if item == oldItem:
            #        continue
            subItems = []
            if IReadContainer.providedBy(item):
                keys = list(item.keys())
                if len(keys) >= 1000:
                    keys = []
            else:
                keys = []

            # include the site manager
            keys.append(u'++etc++site')

            for name in keys:
                # Only include items we can traverse to
                subItem = traverse(item, name, None)
                iconUrl = self.getIconUrl(subItem)
                subitem_len = self.getLengthOf(subItem)
                if subitem_len >= 0:
                    # the test below seems to be broken
                    # with the ++etc++site case
                    if subItem == oldItem:
                        subItems.append(xmlEscapeWithCData(
                            u'<collection name=%s length=%s '
                            u'icon_url=%s>%s</collection>', 
                            name, subitem_len, iconUrl, result))
                    else:
                        subItems.append(xmlEscape(
                            u'<collection name=%s length=%s '
                            u'icon_url=%s/>',
                            name, subitem_len, iconUrl))
                else:
                    subItems.append(xmlEscape(
                        u'<item name=%s icon_url=%s />', name, iconUrl))

            result = u' '.join(subItems)
            oldItem = item

        # do not forget root folder
        iconUrl = self.getIconUrl(oldItem)
        result = xmlEscapeWithCData(
                  u'<collection name=%s baseURL=%s length=%s '
                  u'icon_url=%s isroot="">%s</collection>',
                  rootName, baseURL, len(oldItem), iconUrl, result)

        self.request.response.setHeader('Content-Type', 'text/xml')
        setNoCacheHeaders(self.request.response)
        title = translate(titleTemplate,
                          context=self.request, default=titleTemplate)
        loading = translate(loadingMsg,
                          context=self.request, default=loadingMsg)
        return xmlEscapeWithCData(
                u'<?xml version="1.0" ?>'
                u'<children title_tpl=%s loading_msg=%s>%s</children>',
                title, loading, result)
Пример #16
0
def UpdateEntryChildrenOnRemoveSubscriber(entry, event):
    for obj in getParents(entry):
        if IEntryCountChildren.providedBy(obj):
            obj.children -= 1 #remove one child-count on all parents
Пример #17
0
def UpdateEntryChildrenOnAddSubscriber(entry, event):
    for obj in getParents(entry):
        if IEntryCountChildren.providedBy(obj):
            obj.children += 1 #add one child-count on all parents
Пример #18
0
 def _get_values_shortcuts(self, value, includeValue=False, includeShortcuts=True):
     try:
         intid = getUtility(IIntIds)
         parents = set(getParents(value))
     except Exception, e:
         return None
Пример #19
0
 def testGetParents(self):
     from zope.traversing.api import getParents
     self.assertEqual(getParents(self.item), [self.folder, self.root])
Пример #20
0
 def url(self):
     return '%s/'%absoluteURL(filter(IUserManual.providedBy, getParents(self.context))[0], self.request)
Пример #21
0
 def getServicePath(self):
     path = [parent.__name__ for parent in getParents(self)
                    if parent.__name__]
     path.reverse()
     path.append(self.__name__)
     return path
 def testGetParents(self):
     from zope.traversing.api import getParents
     self.assertEqual(
         getParents(self.item),
         [self.folder, self.root]
         )
Пример #23
0
 def parents(self):
     parent_list = getParents(self.context)
     parent_list.reverse()
     return parent_list[1:]
Пример #24
0
 def resultURL(self, context, request):
     site = None
     for path_element in [context] + getParents(context):
         if IQuotationtoolSite.providedBy(path_element):
             site = path_element
             return absoluteURL(site, request) + u"/@@searchResult.html"