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:
parent
9f27bbc41e
commit
96c68f3cd5
8 changed files with 64 additions and 14 deletions
|
@ -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):
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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'
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Add table
Reference in a new issue