[kupu-checkins] r35614 - in kupu/trunk/kupu/plone: . xml
duncan at codespeak.net
duncan at codespeak.net
Tue Dec 12 10:33:11 CET 2006
Author: duncan
Date: Tue Dec 12 10:33:09 2006
New Revision: 35614
Modified:
kupu/trunk/kupu/plone/exportimport.py
kupu/trunk/kupu/plone/helpers.py
kupu/trunk/kupu/plone/librarytool.py
kupu/trunk/kupu/plone/plonelibrarytool.py
kupu/trunk/kupu/plone/xml/kupuExport.xml
kupu/trunk/kupu/plone/zmi_toolbar.pt
Log:
Added a global toolbar expression which can be used to configure the toolbar buttons as a group. Fixed default for default library.
Modified: kupu/trunk/kupu/plone/exportimport.py
==============================================================================
--- kupu/trunk/kupu/plone/exportimport.py (original)
+++ kupu/trunk/kupu/plone/exportimport.py Tue Dec 12 10:33:09 2006
@@ -110,7 +110,6 @@
PREVIEW = []
preview = PREVIEW + list(info['previews'])
- print preview
kupu.updatePreviewActions(preview)
# Set up libraries
@@ -124,7 +123,8 @@
toolbar = info['toolbar'][0]['elements']
- kupu.set_toolbar_filters(toolbar)
+ globaltoolbar = info['globaltoolbar'][0]
+ kupu.set_toolbar_filters(toolbar, globaltoolbar)
return 'Kupu settings imported.'
@@ -191,10 +191,11 @@
{
'config': {},
'library': { KEY: 'libraries' },
- 'default': {},
+ 'default': { DEFAULT: ('',) },
'resource': { KEY: 'resources' },
'preview': { KEY: 'previews', DEFAULT: () },
'generatepreviews': {},
+ 'globaltoolbar': { DEFAULT: ('',) },
'toolbar': {}
},
'config':
@@ -245,6 +246,7 @@
'scalefield': { DEFAULT: 'image' },
},
'generatepreviews': {},
+ 'globaltoolbar': { '#text': { KEY:None }, },
'toolbar':
{
'element': { KEY: 'elements' },
Modified: kupu/trunk/kupu/plone/helpers.py
==============================================================================
--- kupu/trunk/kupu/plone/helpers.py (original)
+++ kupu/trunk/kupu/plone/helpers.py Tue Dec 12 10:33:09 2006
@@ -58,27 +58,24 @@
__allow_access_to_unprotected_subobjects__ = 1
def __init__(self, tool, context, field=None):
- self.tool = tool
- self.field = field
- widget = getattr(field, 'widget', None)
- self.filter_buttons = getattr(widget, 'filter_buttons', None)
- self.allow_buttons = getattr(widget, 'allow_buttons', None)
- self.visible_buttons = tool.getToolbarFilters(context, field)
-
- def isButtonAllowed(self, name):
- visible = self.visible_buttons.get(name, None)
- if visible is None:
- visible = FILTERDICT.get(name, True)
- if self.allow_buttons is not None:
- return visible and name in self.allow_buttons
- if self.filter_buttons is not None:
- return visible and name not in self.filter_buttons
- return visible
+ def isButtonAllowed(name):
+ visible = visible_buttons.get(name, None)
+ if visible is None:
+ visible = FILTERDICT.get(name, True)
+ if allow_buttons is not None:
+ return visible and name in allow_buttons
+ if filter_buttons is not None:
+ return visible and name not in filter_buttons
+ return visible
- def __getattr__(self, name):
- """name should be an id of a button or a button group in the kupu toolbar."""
- if name[0]=='_':
- raise AttributeError("'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
- allowed = self.isButtonAllowed(name)
- #print name, "->", allowed
- return allowed
+ widget = getattr(field, 'widget', None)
+ filter_buttons = getattr(widget, 'filter_buttons', None)
+ allow_buttons = getattr(widget, 'allow_buttons', None)
+ visible_buttons, gvisible = tool.getToolbarFilters(context, field)
+ if gvisible is None:
+ gvisible = FILTERDICT.keys()
+ else:
+ for k in FILTERDICT.keys():
+ setattr(self, k, False)
+ for k in gvisible:
+ setattr(self, k, isButtonAllowed(k))
Modified: kupu/trunk/kupu/plone/librarytool.py
==============================================================================
--- kupu/trunk/kupu/plone/librarytool.py (original)
+++ kupu/trunk/kupu/plone/librarytool.py Tue Dec 12 10:33:09 2006
@@ -227,7 +227,7 @@
return expr(context)
return url
- def _setToolbarFilters(self, filters):
+ def _setToolbarFilters(self, filters, globalfilter):
"""Set the toolbar filtering
filter is a list of records with: id, visible, override"""
clean = {}
@@ -246,20 +246,30 @@
clean[id] = dict(id=id, visible=visible, override=expr)
self._toolbar_filters = clean
+ if globalfilter:
+ self._global_toolbar_filter = Expression(globalfilter)
+ else:
+ self._global_toolbar_filter = None
def getToolbarFilters(self, context, field=None):
expr_context = self._getExpressionContext(context)
expr_context.setGlobal('field', field)
filters = getattr(self, '_toolbar_filters', {})
+ gfilter = getattr(self, '_global_toolbar_filter', None)
+ if gfilter:
+ gvisible = gfilter(expr_context)
+ else:
+ gvisible = None
+
visible = {}
for k in filters:
f = filters[k]
override = f.get('override', None)
if override:
- visible[k] = override(expr_context)
+ visible[k] = bool(override(expr_context))
else:
visible[k] = f['visible']
- return visible
+ return visible, gvisible
def _getToolbarFilterOptions(self):
return getattr(self, '_toolbar_filters', {})
Modified: kupu/trunk/kupu/plone/plonelibrarytool.py
==============================================================================
--- kupu/trunk/kupu/plone/plonelibrarytool.py (original)
+++ kupu/trunk/kupu/plone/plonelibrarytool.py Tue Dec 12 10:33:09 2006
@@ -212,7 +212,7 @@
return res
security.declareProtected(permissions.ManageLibraries, "set_toolbar_filters")
- def set_toolbar_filters(self, filters, REQUEST=None):
+ def set_toolbar_filters(self, filters, globalfilter, REQUEST=None):
"""Set the toolbar filtering
filter is a list of records with: id, checked, expression"""
DEFAULTS = helpers.FILTERDICT
@@ -223,10 +223,17 @@
return expr != '' or visible != DEFAULTS.get(id, False)
cleaned = [ f for f in filters if nonstandard(f) ]
- self._setToolbarFilters(cleaned)
+ self._setToolbarFilters(cleaned, globalfilter)
if REQUEST:
REQUEST.RESPONSE.redirect(self.absolute_url() + '/zmi_toolbar')
+ security.declareProtected(permissions.ManageLibraries, "getGlobalButtonFilter")
+ def getGlobalButtonFilter(self):
+ gfilter = getattr(self, '_global_toolbar_filter', None)
+ if gfilter is not None:
+ return gfilter.text
+ return ''
+
security.declareProtected('View', "getHtmlExclusions")
def getHtmlExclusions(self):
try:
Modified: kupu/trunk/kupu/plone/xml/kupuExport.xml
==============================================================================
--- kupu/trunk/kupu/plone/xml/kupuExport.xml (original)
+++ kupu/trunk/kupu/plone/xml/kupuExport.xml Tue Dec 12 10:33:09 2006
@@ -29,6 +29,7 @@
<preview tal:repeat="t context/getPreviews"
tal:attributes="portaltype t/portal_type;
preview t/previewaction; normal t/normalaction; scalefield t/scalefield" />
+ <globaltoolbar tal:content="info/getGlobalButtonFilter" />
<toolbar>
<element tal:repeat="opt info/getFilterOptions"
tal:attributes="id opt/id; visible opt/visible; expression opt/override;" />
Modified: kupu/trunk/kupu/plone/zmi_toolbar.pt
==============================================================================
--- kupu/trunk/kupu/plone/zmi_toolbar.pt (original)
+++ kupu/trunk/kupu/plone/zmi_toolbar.pt Tue Dec 12 10:33:09 2006
@@ -24,12 +24,31 @@
tal:attributes="action here/absolute_url">
<fieldset>
+ <legend i18n:translate="legend_link_options">Global button visibility</legend>
+ <div class="formHelp" i18n:translate="help_link_uid">
+ You may enter an expression to control the visibility of all buttons together.
+ It should return a list of visible button ids, or None to leave all buttons visible.
+ The visibility rules below are then applied to further filter out individual buttons.
+ You might use this to restrict a particular class of users to a subset of kupu functions.
+
+ <input type="text" style="width:90%" tal:attributes="value context/getGlobalButtonFilter"
+ name="globalfilter" />
+ </div>
+ </fieldset>
+
+ <fieldset>
<legend i18n:translate="legend_link_options">Button visibility</legend>
<div class="formHelp" i18n:translate="help_link_uid">Control the global visibility of toolbar buttons from this screen.
If no expression is entered, only checked buttons are visible. Enter an expression for finer control of visibility.
Individual fields may also whitelist or blacklist buttons: see the field schema.
<div>Values available in expressions includes 'field' as well as the usual names</div>
<!-- object_url folder_url portal_url object folder portal nothing request modules member -->
+ e.g. to restrict the drawer buttons to users with the
+ appropriate permissions give imagelibdrawer-button and
+ linklibdrawer-button the expression:
+ <div>
+ <code>python:member and member.has_permission('Kupu: Query libraries',portal)</code>
+ </div>
</div>
<table class="listing nosort">
More information about the kupu-checkins
mailing list