From b81db8797a04236ba8ae8f7d76dc55848781acc1 Mon Sep 17 00:00:00 2001
From: legac <renaud.legac@free.fr>
Date: Sun, 1 Sep 2013 11:23:37 +0200
Subject: [PATCH] None node can be added in the ViewportModifier.

---
 models/widgets_viewport.py              |  7 ++++++-
 modules/plugin_dbui/viewportmodifier.py | 22 ++++++++++++++++++----
 static/plugin_dbui/CHANGELOG            |  1 +
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/models/widgets_viewport.py b/models/widgets_viewport.py
index 8a2986a8..2a84acb8 100644
--- a/models/widgets_viewport.py
+++ b/models/widgets_viewport.py
@@ -2,6 +2,11 @@
 """ widgets viewport
 
 """
+#
+# the CAS node
+#
+casNode = None
+
 #
 # The form node
 #
@@ -48,6 +53,6 @@ reportNode.add_child(T('report_3'), leaf_3)
 viewportModifier = dbui.ViewportModifier()
 viewportModifier.append_plugins('pViewportLogin')
 viewportModifier.configure(logged=True)
-viewportModifier.add_node(helpNode, formNode, gridNode, reportNode)
+viewportModifier.add_node(helpNode, casNode, formNode, gridNode, reportNode)
 
 viewportModifier.default_node(T('Tables'), T('publications'))
diff --git a/modules/plugin_dbui/viewportmodifier.py b/modules/plugin_dbui/viewportmodifier.py
index c84f2611..15f0af32 100644
--- a/modules/plugin_dbui/viewportmodifier.py
+++ b/modules/plugin_dbui/viewportmodifier.py
@@ -50,17 +50,31 @@ class ViewportModifier(Modifier):
 
 
     def add_node(self, *args):
-        """Add L{Node}s to the navigation tree.
+        """Add a list of L{Node}s to the navigation tree.
 
-        @type args: L{Node}
+        @type args: list of L{Node}
         @param args:
         
+        @note: Elements of the list equal to C{None} are ignored.
+        This feature is useful when the list of nodes depend on user role.
+        
+        @raise ViewportModifierException: at least one element of the list
+        is not a C{Node} or C{None}.
+         
         """
+        li = []
         for el in args:
-            if not isinstance(el, Node):
+            
+            if isinstance(el, Node):
+                li.append(el)
+                
+            elif el == None:
+                continue
+            
+            else:
                 raise ViewportModifierException(MSG_INVALID_NODE)
         
-        self.data.nodes.extend(args)
+        self.data.nodes.extend(li)
 
 
     def default_node(self, *args):
diff --git a/static/plugin_dbui/CHANGELOG b/static/plugin_dbui/CHANGELOG
index b37a4b22..814c7d30 100644
--- a/static/plugin_dbui/CHANGELOG
+++ b/static/plugin_dbui/CHANGELOG
@@ -4,6 +4,7 @@ HEAD
   - The viewport can open a tab at startup.
   - Automatic loggout when the page is refreshed and closed.
   - In the App.GridPanel a new record is inserted after the selected one.
+  - None node can be added in the ViewportModifier.
 
 0.4.13.2 (Jul 2013)
   - Table callback _before_delete, _before_insert and  _before_update
-- 
GitLab