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): class BaseView(object):
index = generic_page index = generic_page
default_template = view_macros # specify in subclass default_template = template = view_macros # specify in subclass
resource_prefix = '/@@/' resource_prefix = '/@@/'
view_mode = 'view' view_mode = 'view'
@ -55,8 +55,11 @@ class BaseView(object):
def defaultMacros(self): def defaultMacros(self):
return self.default_template.macros return self.default_template.macros
def macros(self):
return self.template.macros
def contentMacro(self): def contentMacro(self):
return self.defaultMacros()[getattr(self, 'content_renderer', 'content')] return self.macros()[getattr(self, 'content_renderer', 'content')]
#@rcache #@rcache
def homeURL(self): def homeURL(self):

View file

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

View file

@ -2,11 +2,30 @@
<metal:content define-macro="media_manager"> <metal:content define-macro="media_manager">
<h1 tal:content="context/title">Media Manager</h1> <h1>
<div tal:repeat="obj view/listObjects"> <span tal:content="context/title" />:
<a tal:attributes="href obj/absolute_url" <span i18n:translate="">Media Manager</span></h1>
tal:content="obj/title" /> <form method="post" enctype="multipart/form-data">
</div> <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> </metal:content>

View file

@ -29,16 +29,26 @@ from zope.event import notify
from zope.lifecycleevent import ObjectModifiedEvent from zope.lifecycleevent import ObjectModifiedEvent
from zope.traversing.browser import absoluteURL from zope.traversing.browser import absoluteURL
from cybertools.wiki.browser.view import WikiBaseView
from cybertools.wiki.interfaces import IMediaManager 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' content_renderer = 'media_manager'
def update(self): 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 return True
def listObjects(self): def listObjects(self):
@ -46,3 +56,11 @@ class MediaManagerView(object):
mm = component.getAdapter(self.context, IMediaManager, name=mmName) mm = component.getAdapter(self.context, IMediaManager, name=mmName)
return mm.listObjects() 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): class WikiBaseView(object):
default_template = ViewPageTemplateFile('default.pt') default_template = ViewPageTemplateFile('default.pt')
template = default_template
@Lazy @Lazy
def actions(self): 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.link.interfaces import ILinkManager
from cybertools.util.generic.interfaces import IGenericObject, IGenericFolder from cybertools.util.generic.interfaces import IGenericObject, IGenericFolder
from cybertools.wiki.base.config import WikiConfigInfo, BaseConfigurator 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 WikiManager as BaseWikiManager
from cybertools.wiki.base.wiki import Wiki as BaseWiki from cybertools.wiki.base.wiki import Wiki as BaseWiki
from cybertools.wiki.base.wiki import WikiPage as BaseWikiPage from cybertools.wiki.base.wiki import WikiPage as BaseWikiPage
@ -165,3 +166,8 @@ class MediaContainer(object):
pass pass
class MediaObject(MediaObject):
pass

View file

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

View file

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