make link rendering more flexible, e.g. for using it with loops

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@3246 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2009-02-22 15:23:35 +00:00
parent 30d6ee0353
commit 6f245e7c5b
2 changed files with 18 additions and 4 deletions

View file

@ -111,7 +111,7 @@ class LinkProcessor(object):
def process(self):
wiki = self.source.getWiki()
manager = wiki.getManager()
sourceUid = manager.getUid(self.source)
sourceUid = self.source.getUid()
lmName = self.source.getConfig('linkManager')
lm = wiki.getManager().getPlugin(ILinkManager, lmName)
existing = lm.query(source=sourceUid, name=self.targetName)
@ -120,7 +120,7 @@ class LinkProcessor(object):
target = manager.getObject(link.target)
else:
target = wiki.getPage(self.targetName)
targetUid = manager.getUid(target)
targetUid = target is not None and target.getUid() or None
link = lm.createLink(self.targetName, sourceUid, targetUid)
if link.refuri is None:
if self.request is not None:
@ -128,12 +128,15 @@ class LinkProcessor(object):
link.refuri = '%s/create.html?linkid=%s' % (
absoluteURL(wiki, self.request), link.identifier)
else:
link.refuri = absoluteURL(target, self.request)
link.refuri = self.getTargetURI(target)
self.setURI(link.refuri)
if target is None:
self.markPresentation('create')
self.addText('?')
def getTargetURI(self, obj):
return absoluteURL(obj, self.request)
def setURI(self, uri):
raise ValueError('To be implemented by subclass.')

View file

@ -62,7 +62,9 @@ class WikiManager(BaseConfiguration):
return component.getUtility(IIntIds).getId(obj)
def getObject(self, uid):
return component.getUtility(IIntIds).getObject(uid)
if uid is None:
return None
return component.getUtility(IIntIds).getObject(int(uid))
# configuration
@ -91,6 +93,11 @@ class Wiki(BaseConfiguration):
page.wiki = self
return page
def addPage(self, page):
self.pages[page.name] = page
page.wiki = self
return page
def removePage(self, name):
if name in self.pages:
del self.pages[name]
@ -122,6 +129,7 @@ class WikiPage(BaseConfiguration):
return self.wiki
def render(self, request=None):
# TODO: move render() method to a view class
source = self.preprocess(self.text)
tree = self.parse(source, request)
result = self.write(tree)
@ -143,6 +151,9 @@ class WikiPage(BaseConfiguration):
def postprocess(self, result):
return result
def getUid(self):
return self.getWiki().getManager().getUid(self)
# configuration
def getConfigParent(self):