[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