provide basic media (attachment) management for wiki

git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@4066 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-11-09 14:19:15 +00:00
parent 9f27bbc41e
commit 96c68f3cd5
8 changed files with 64 additions and 14 deletions

View file

@ -35,7 +35,7 @@ view_macros = ViewPageTemplateFile(os.path.join('liquid', 'view_macros.pt'))
class BaseView(object):
index = generic_page
default_template = view_macros # specify in subclass
default_template = template = view_macros # specify in subclass
resource_prefix = '/@@/'
view_mode = 'view'
@ -55,8 +55,11 @@ class BaseView(object):
def defaultMacros(self):
return self.default_template.macros
def macros(self):
return self.template.macros
def contentMacro(self):
return self.defaultMacros()[getattr(self, 'content_renderer', 'content')]
return self.macros()[getattr(self, 'content_renderer', 'content')]
#@rcache
def homeURL(self):

View file

@ -70,7 +70,7 @@ class MediaObject(object):
def __init__(self, name, title=None, parent=None):
self.name = name
self.title = title or Name
self.title = title or name
self.parent = parent
def getManager(self):

View file

@ -2,11 +2,30 @@
<metal:content define-macro="media_manager">
<h1 tal:content="context/title">Media Manager</h1>
<div tal:repeat="obj view/listObjects">
<h1>
<span tal:content="context/title" />:
<span i18n:translate="">Media Manager</span></h1>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="form_action" value="upload" />
<div>
<input type="file" name="file" /></div>
<div>
<input type="submit" name="upload" value="Upload File" /></div>
</form>
<tal:listing define="objects view/listObjects"
condition="objects">
<h2 i18n:translate="">Media Objects</h2>
<div tal:repeat="obj objects">
<a tal:attributes="href obj/absolute_url"
tal:content="obj/title" />
</div>
</tal:listing>
</metal:content>
<metal:content define-macro="media_object">
<h1>
<span tal:content="context/title" /></h1>
</metal:content>

View file

@ -29,16 +29,26 @@ from zope.event import notify
from zope.lifecycleevent import ObjectModifiedEvent
from zope.traversing.browser import absoluteURL
from cybertools.wiki.browser.view import WikiBaseView
from cybertools.wiki.interfaces import IMediaManager
class MediaManagerView(object):
class MediaManagerView(WikiBaseView):
default_template = ViewPageTemplateFile('default.pt')
template = ViewPageTemplateFile('media.pt')
content_renderer = 'media_manager'
def update(self):
form = self.request.form
if form.get('form_action') == 'upload':
f = form.get('file')
if f:
data = f.read()
mmName = self.context.getConfig('mediaManager')
mm = component.getAdapter(self.context, IMediaManager, name=mmName)
obj = mm.createObject(f.filename)
obj.setRawData(data)
return True
def listObjects(self):
@ -46,3 +56,11 @@ class MediaManagerView(object):
mm = component.getAdapter(self.context, IMediaManager, name=mmName)
return mm.listObjects()
class MediaObjectView(WikiBaseView):
template = ViewPageTemplateFile('media.pt')
content_renderer = 'media_object'

View file

@ -35,6 +35,7 @@ from cybertools.link.interfaces import ILinkManager
class WikiBaseView(object):
default_template = ViewPageTemplateFile('default.pt')
template = default_template
@Lazy
def actions(self):

View file

@ -36,6 +36,7 @@ from cybertools.link.base import Link, LinkManager as BaseLinkManager
from cybertools.link.interfaces import ILinkManager
from cybertools.util.generic.interfaces import IGenericObject, IGenericFolder
from cybertools.wiki.base.config import WikiConfigInfo, BaseConfigurator
from cybertools.wiki.base.media import MediaObject
from cybertools.wiki.base.wiki import WikiManager as BaseWikiManager
from cybertools.wiki.base.wiki import Wiki as BaseWiki
from cybertools.wiki.base.wiki import WikiPage as BaseWikiPage
@ -165,3 +166,8 @@ class MediaContainer(object):
pass
class MediaObject(MediaObject):
pass

View file

@ -46,17 +46,17 @@ class BaseView(BrowserView, BaseView):
template_name = 'view_macros'
content_renderer = 'content'
def defaultMacros(self):
def macros(self):
template = getattr(self.context, self.template_name, None)
if template is None:
return super(BaseView, self).defaultMacros()
return super(BaseView, self).macros()
return template.macros
def contentMacro(self):
macroName = self.content_renderer
macro = self.defaultMacros().get(macroName)
macro = self.macros().get(macroName)
if macro is None:
return super(BaseView, self).defaultMacros()[macroName]
return super(BaseView, self).macros()[macroName]
return macro

View file

@ -84,6 +84,9 @@ class GenericFolder(GenericObject):
def getItems(self, types=None):
return self.objectItems(types)
def values(self, types=None):
return self.objectValues(types)
@component.adapter(IGeneric, IObjectAddedEvent)
def setup(obj, event):