Browse Source

- fixes javascript notations (not working on Chrome)

Damien Accorsi 10 years ago
parent
commit
cdf3058861

+ 14 - 11
pboard/pboard/controllers/api.py View File

@@ -41,12 +41,15 @@ class PODApiController(BaseController):
41 41
 
42 42
     menu = pcam.PODApiMenuController()
43 43
 
44
+    def on_off_to_boolean(self, on_or_off):
45
+        return True if on_or_off=='on' else False
46
+
44 47
     @expose()
45
-    def create_event(self, parent_id=None, data_label='', data_datetime=None, data_content='', data_reminder_datetime=None, add_reminder=False, **kw):
48
+    def create_event(self, parent_id=None, data_label='', data_datetime=None, data_content='', data_reminder_datetime=None, add_reminder=False, inherit_rights='off', **kw):
46 49
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
47 50
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
48
-      
49
-      loNewNode = loApiController.createNode(int(parent_id))
51
+
52
+      loNewNode = loApiController.createNode(int(parent_id), self.on_off_to_boolean(inherit_rights))
50 53
       loNewNode.node_type     = pmd.PBNodeType.Event
51 54
       loNewNode.data_label    = data_label
52 55
       loNewNode.data_content  = data_content
@@ -58,11 +61,11 @@ class PODApiController(BaseController):
58 61
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
59 62
 
60 63
     @expose()
61
-    def create_contact(self, parent_id=None, data_label='', data_content='', **kw):
64
+    def create_contact(self, parent_id=None, data_label='', data_content='', inherit_rights='off', **kw):
62 65
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
63 66
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
64 67
       
65
-      loNewNode = loApiController.createNode(int(parent_id))
68
+      loNewNode = loApiController.createNode(int(parent_id), self.on_off_to_boolean(inherit_rights))
66 69
       loNewNode.node_type     = pmd.PBNodeType.Contact
67 70
       loNewNode.data_label    = data_label
68 71
       loNewNode.data_content  = data_content
@@ -75,7 +78,7 @@ class PODApiController(BaseController):
75 78
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
76 79
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
77 80
 
78
-      loNewNode = loApiController.createNode(int(parent_id))
81
+      loNewNode = loApiController.createNode(int(parent_id), self.on_off_to_boolean(is_shared))
79 82
       loNewNode.node_type     = pmd.PBNodeType.Comment
80 83
       loNewNode.data_label    = data_label
81 84
       loNewNode.data_content  = data_content
@@ -86,11 +89,11 @@ class PODApiController(BaseController):
86 89
       redirect(lurl('/document/%i'%(loNewNode.parent_id)))
87 90
 
88 91
     @expose()
89
-    def create_file(self, parent_id=None, data_label='', data_content='', data_file=None, **kw):
92
+    def create_file(self, parent_id=None, data_label='', data_content='', data_file=None, inherit_rights='off', **kw):
90 93
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
91 94
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
92 95
       
93
-      loNewNode = loApiController.createNode(int(parent_id))
96
+      loNewNode = loApiController.createNode(int(parent_id), self.on_off_to_boolean(inherit_rights))
94 97
       loNewNode.node_type     = pmd.PBNodeType.File
95 98
       loNewNode.data_label    = data_label
96 99
       loNewNode.data_content  = data_content
@@ -194,7 +197,7 @@ class PODApiController(BaseController):
194 197
       redirect(lurl('/document/%s'%(node_id)))
195 198
 
196 199
     @expose()
197
-    def create_document(self, parent_id=None, data_label='', data_content=''):
200
+    def create_document(self, parent_id=None, data_label='', data_content='', inherit_rights='off'):
198 201
       loCurrentUser   = pld.PODStaticController.getCurrentUser()
199 202
       loApiController = pld.PODUserFilteredApiController(loCurrentUser.user_id)
200 203
 
@@ -203,7 +206,7 @@ class PODApiController(BaseController):
203 206
         loParent = loApiController.getNode(parent_id)
204 207
         lsNodeName = 'Subdocument of (%s)' % loParent.data_label
205 208
 
206
-      loNewNode = loApiController.createDummyNode(parent_id)
209
+      loNewNode = loApiController.createDummyNode(parent_id, self.on_off_to_boolean(inherit_rights))
207 210
       loNewNode.data_label   = lsNodeName
208 211
       loNewNode.data_content = 'insert content...'
209 212
 
@@ -301,7 +304,7 @@ class PODApiController(BaseController):
301 304
       redirect(lurl('/document/%s#tab-comments'%(loNode._oParent.node_id)))
302 305
 
303 306
     @expose()
304
-    @require(can_read())
307
+    @require(can_write())
305 308
     def set_access_management(self, node_id, is_shared='off', read=[0], write=[0]):
306 309
 
307 310
       llReadAccessGroupIds = [int(liGroupId) for liGroupId in read]

+ 1 - 1
pboard/pboard/controllers/apimenu.py View File

@@ -44,7 +44,7 @@ class PODApiMenuController(plb.BaseController):
44 44
             print("Node not found: {0}".format(current_node_id))
45 45
 
46 46
         allowed_nodes = api_controller.getListOfAllowedNodes()
47
-        initial_menu_structure = api_controller.buildTreeListForMenu(current_node, pmd.PBNodeStatus.getVisibleIdsList(), allowed_nodes)
47
+        initial_menu_structure = api_controller.buildTreeListForMenu(current_node, allowed_nodes)
48 48
 
49 49
         return initial_menu_structure
50 50
 

+ 46 - 31
pboard/pboard/lib/dbapi.py View File

@@ -94,19 +94,35 @@ class PODUserFilteredApiController(object):
94 94
     return self._iUserIdFilteringList
95 95
 
96 96
 
97
-  def createNode(self, parent_id=0):
97
+  def createNode(self, parent_id=0, inherit_rights=True):
98 98
     loNode          = pbmd.PBNode()
99 99
     loNode.owner_id = self._iCurrentUserId
100 100
     if int(parent_id)!=0:
101
-      loNode.parent_id = parent_id
102
-    parent_rights = DBSession.query(pbma.Rights).filter(pbma.Rights.node_id==parent_id).all()
103
-    loNode.rights = parent_rights
104
-    loNode.rights = [pbma.Rights(group_id=r.group_id, rights=r.rights) for r in parent_rights]
101
+        loNode.parent_id = parent_id
102
+
103
+    if inherit_rights:
104
+        parent_node = DBSession.query(pbmd.PBNode).filter(pbmd.PBNode.node_id==parent_id).one()
105
+        self.copy_rights(parent_node, loNode)
106
+
105 107
     DBSession.add(loNode)
108
+
106 109
     return loNode
107
-  
108
-  def createDummyNode(self, parent_id):
109
-    loNewNode = self.createNode(parent_id)
110
+
111
+  def copy_rights(self, from_node: pbmd.PBNode, to_node: pbmd.PBNode, copy_also_is_shared=True):
112
+    """
113
+    copy rights from first node to second one
114
+    """
115
+    for parent_right in from_node._lRights:
116
+        new_right = self.createRight()
117
+        new_right.group_id = parent_right.group_id
118
+        new_right.rights = parent_right.rights
119
+        to_node._lRights.append(new_right)
120
+
121
+    if copy_also_is_shared:
122
+        to_node.is_shared = from_node.is_shared
123
+
124
+  def createDummyNode(self, parent_id, inherit_rights=True):
125
+    loNewNode = self.createNode(parent_id, inherit_rights)
110 126
     loNewNode.data_label   = ''
111 127
     loNewNode.data_content = ''
112 128
     return loNewNode
@@ -171,13 +187,13 @@ class PODUserFilteredApiController(object):
171 187
             FROM
172 188
                 pod_group_node AS pgn
173 189
                 join pod_user_group AS pug ON pug.group_id = pgn.group_id
174
-                join pod_nodes AS pn ON pgn.node_id=pn.node_id
190
+                join pod_nodes AS pn ON pgn.node_id=pn.node_id AND pn.is_shared='t'
175 191
             WHERE
176 192
                 pn.node_type='data'
177 193
                 AND pn.node_status NOT IN ('deleted', 'closed')
178 194
                 AND pn.node_id=pgn.node_id
179 195
                 AND pgn.rights > 0
180
-                AND pug.user_id = 3
196
+                AND pug.user_id = :owner_id
181 197
 
182 198
             UNION
183 199
                 SELECT
@@ -201,9 +217,9 @@ class PODUserFilteredApiController(object):
201 217
                 FROM
202 218
                     pod_nodes AS pn
203 219
                 WHERE
204
-                    pn.node_type='data'
220
+                    pn.node_type = 'data'
205 221
                     AND pn.node_status NOT IN ('deleted', 'closed')
206
-                    AND pn.owner_id=:owner_id
222
+                    AND pn.owner_id = :owner_id
207 223
 
208 224
             ORDER BY node_id ASC
209 225
         """
@@ -286,7 +302,7 @@ class PODUserFilteredApiController(object):
286 302
 
287 303
 
288 304
 
289
-  def buildTreeListForMenu(self, poCurrentNode: pbmd.PBNode, plViewableStatusId: [], plAllowedNodes: [pbmd.PBNode]) -> [pbmd.NodeTreeItem]:
305
+  def buildTreeListForMenu(self, current_node: pbmd.PBNode, allowed_nodes: [pbmd.PBNode]) -> [pbmd.NodeTreeItem]:
290 306
     # The algorithm is:
291 307
     # 1. build an intermediate tree containing only current node and parent path
292 308
     #    + complete it with sibling at each level (except root)
@@ -298,34 +314,33 @@ class PODUserFilteredApiController(object):
298 314
     previous_tree_item = None
299 315
     tmp_children_nodes = []
300 316
 
301
-    print("============================> ",poCurrentNode)
302
-    if poCurrentNode is not None:
303
-        breadcrumb_nodes = poCurrentNode.getBreadCrumbNodes()
304
-        print("====================> NODES", breadcrumb_nodes)
305
-        breadcrumb_nodes.append(poCurrentNode) # by default the current node is not included
317
+    if current_node is not None:
318
+        breadcrumb_nodes = current_node.getBreadCrumbNodes()
319
+        breadcrumb_nodes.append(current_node) # by default the current node is not included
306 320
 
307 321
         for breadcrumb_node in reversed(breadcrumb_nodes):
308 322
             if previous_tree_item is None:
309 323
                 # First iteration. We add all current_node children
310 324
                 for child_node in breadcrumb_node.getChildren():
311
-                    child_item = pbmd.NodeTreeItem(child_node, [])
312
-                    assert(isinstance(child_item, pbmd.NodeTreeItem))
313
-                    tmp_children_nodes.append(child_item)
325
+                    if child_node in allowed_nodes:
326
+                        child_item = pbmd.NodeTreeItem(child_node, [])
327
+                        tmp_children_nodes.append(child_item)
328
+
314 329
                 previous_tree_item = pbmd.NodeTreeItem(breadcrumb_node, tmp_children_nodes)
330
+
315 331
             else:
316 332
                 tmp_children_nodes = []
317 333
                 for child_node in breadcrumb_node.getChildren():
318
-                    if child_node == previous_tree_item.node:
319
-                        assert(isinstance(previous_tree_item, pbmd.NodeTreeItem))
320
-                        tmp_children_nodes.append(previous_tree_item)
321
-                    else:
322
-                        sibling_node = pbmd.NodeTreeItem(child_node, [])
323
-                        assert(isinstance(sibling_node, pbmd.NodeTreeItem))
324
-                        tmp_children_nodes.append(sibling_node)
334
+                    if child_node in allowed_nodes:
335
+                        if child_node == previous_tree_item.node:
336
+                            tmp_children_nodes.append(previous_tree_item)
337
+                        else:
338
+                            sibling_node = pbmd.NodeTreeItem(child_node, [])
339
+                            tmp_children_nodes.append(sibling_node)
325 340
 
326 341
                 previous_tree_item = pbmd.NodeTreeItem(breadcrumb_node, tmp_children_nodes)
327 342
 
328
-    for node in plAllowedNodes:
343
+    for node in allowed_nodes:
329 344
         # This part of the algorithm insert root items
330 345
         if node.parent_id==0 or node.parent_id is None:
331 346
             if previous_tree_item is not None and node == previous_tree_item.node:
@@ -337,9 +352,9 @@ class PODUserFilteredApiController(object):
337 352
             # Try to add nodes shared with me but with a parent which is not shared
338 353
             if node.owner_id!=self._iCurrentUserId:
339 354
                 # this is a node shared with me
340
-                if node._oParent!=None and node._oParent not in plAllowedNodes:
355
+                if node._oParent!=None and node._oParent not in allowed_nodes:
341 356
                     # the node is shared but not the parent => put it in the root
342
-                    node_tree.append(pbmd.NodeTreeItem(node))
357
+                    node_tree.append(pbmd.NodeTreeItem(node, []))
343 358
 
344 359
 
345 360
     return node_tree

+ 4 - 1
pboard/pboard/public/javascript/pod.js View File

@@ -1,4 +1,7 @@
1
-  function generateStringId(charNb = 32, allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") {
1
+  function generateStringId(charNb, allowedChars) {
2
+    if (typeof charNb === 'undefined') { charNb = 32; }
3
+    if (typeof allowedChars === 'undefined') { allowedChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; }
4
+  
2 5
     var text = "";
3 6
 
4 7
     for( var i=0; i < charNb; i++ ) {

+ 27 - 19
pboard/pboard/templates/document-widgets-tabs.mak View File

@@ -119,7 +119,8 @@
119 119
           <div id="document-share-people-selector">
120 120
             <p>${_('Select read and write access for each group or people...')}</p>
121 121
             <script>
122
-            function updateRights(psUserId, piNewValue = -1) {
122
+            function updateRights(psUserId, piNewValue) {
123
+              if (typeof piNewValue === 'undefined') { piNewValue = -1; }
123 124
               var ACCESS_UNDEFINED = -1;
124 125
               var ACCESS_NONE = 0;
125 126
               var ACCESS_READ = 1;
@@ -485,7 +486,7 @@
485 486
   % endfor
486 487
 </%def>
487 488
 
488
-<%def name="CommentTabContent(poNode)">
489
+<%def name="CommentTabContent(current_user, poNode)">
489 490
   <h4>${_('Comment thread')}</h4>
490 491
   
491 492
   % if len(poNode.getComments())<=0:
@@ -501,23 +502,30 @@
501 502
     % endif
502 503
     <div>
503 504
       % for comment in poNode.getComments():
504
-        <p>
505
-          <a href="${tg.url('/api/toggle_share_status', dict(node_id=comment.node_id))}">
506
-            % if comment.is_shared:
507
-              <span class="label label-warning" title="${_('Shared comment. Click to make private.')}">${h.ICON.Shared|n}</span>
508
-            % else:
509
-              <span class="label label-info" title="${_('Private comment. Click to share.')}">${h.ICON.Private|n}</span>
510
-            % endif
511
-          </a>
512
-          <strong>${comment._oOwner.display_name}</strong>
513
-          <i class="pull-right">
514
-            The ${comment.getFormattedDate(comment.updated_at)} 
515
-            at ${comment.getFormattedTime(comment.updated_at)}
516
-          </i>
517
-          <br/>
518
-          ${comment.data_content|n}
519
-          <hr style="border-top: 1px dotted #ccc; margin: 0;"/>
520
-        </p>
505
+         % if comment.is_shared or comment.owner_id==current_user.user_id:
506
+##
507
+## FIXME - 2014-05-29
508
+## We do not check specific rights on comment but on document instead
509
+## In the future full-API architecture, it should be fixed
510
+##
511
+          <p>
512
+            <a href="${tg.url('/api/toggle_share_status', dict(node_id=comment.node_id))}">
513
+              % if comment.is_shared:
514
+                <span class="label label-warning" title="${_('Shared comment. Click to make private.')}">${h.ICON.Shared|n}</span>
515
+              % else:
516
+                <span class="label label-info" title="${_('Private comment. Click to share.')}">${h.ICON.Private|n}</span>
517
+              % endif
518
+            </a>
519
+            <strong>${comment._oOwner.display_name}</strong>
520
+            <i class="pull-right">
521
+              The ${comment.getFormattedDate(comment.updated_at)} 
522
+              at ${comment.getFormattedTime(comment.updated_at)}
523
+            </i>
524
+            <br/>
525
+            ${comment.data_content|n}
526
+            <hr style="border-top: 1px dotted #ccc; margin: 0;"/>
527
+          </p>
528
+        % endif
521 529
       % endfor
522 530
     </div>
523 531
   % endif

+ 53 - 13
pboard/pboard/templates/document-widgets.mak View File

@@ -125,7 +125,7 @@
125 125
   </div>
126 126
 </%def>
127 127
 
128
-<%def name="BreadCrumb(poNode)">
128
+<%def name="BreadCrumb(poNode, allowed_nodes)">
129 129
   <ul class="breadcrumb span12">
130 130
     <li>
131 131
       <span class="divider">/</span>
@@ -133,10 +133,17 @@
133 133
     </li>
134 134
     % if poNode!=None:
135 135
       % for breadcrumb_node in poNode.getBreadCrumbNodes():
136
-      <li>
137
-        <span class="divider">/</span>
138
-        <a href="${tg.url('/document/%s'%(breadcrumb_node.node_id))}">${breadcrumb_node.getTruncatedLabel(30)}</a>
139
-      </li>
136
+##
137
+## HACK - D.A - 2014-05-29
138
+## Here we remove forbidden nodes from the breadcrumb
139
+## This should not be done in the templates!
140
+##
141
+        % if breadcrumb_node in allowed_nodes:
142
+          <li>
143
+            <span class="divider">/</span>
144
+            <a href="${tg.url('/document/%s'%(breadcrumb_node.node_id))}">${breadcrumb_node.getTruncatedLabel(30)}</a>
145
+          </li>
146
+        % endif
140 147
       % endfor
141 148
       <li class="active">
142 149
         <span class="divider">/</span>
@@ -275,7 +282,7 @@
275 282
   </div>
276 283
 </%def>
277 284
 
278
-<%def name="DocumentEditModalDialog(piParentNodeId, poNode, psPostUrl, psModalId, psTitle)">
285
+<%def name="DocumentEditModalDialog(poParentNode, poNode, psPostUrl, psModalId, psTitle)">
279 286
   <div
280 287
     id="${psModalId}"
281 288
     class="modal hide"
@@ -298,7 +305,7 @@
298 305
           % if poNode!=None:
299 306
             <input type="hidden" name="node_id" value="${poNode.node_id}"/>
300 307
           % endif
301
-          <input type="hidden" name="parent_id" value="${piParentNodeId if piParentNodeId else 0}"/>
308
+          <input type="hidden" name="parent_id" value="${poParentNode.node_id if poParentNode else 0}"/>
302 309
           
303 310
           <input type="hidden" name="data_content" id="${psModalId}-textarea" />
304 311
           <input
@@ -312,6 +319,13 @@
312 319
         <div>
313 320
           ${POD.RichTextEditor(psModalId+'-textarea-wysiwyg', poNode.data_content if poNode!=None else '')}
314 321
         </div>
322
+        % if poParentNode and poParentNode.is_shared:
323
+          <p>
324
+            <input type="checkbox" name="inherit_rights" checked="checked"/> 
325
+            ${_('Share:')}
326
+            <span class="pod-grey">${_('if checked, then copy share properties from current item')}</span>
327
+          </p>
328
+        % endif
315 329
       </form>
316 330
 
317 331
 ## MODAL BODY [END]
@@ -338,7 +352,7 @@
338 352
 </%def>
339 353
 
340 354
 
341
-<%def name="FileEditModalDialog(piParentNodeId, poNode, psPostUrl, psModalId, psTitle)">
355
+<%def name="FileEditModalDialog(poParentNode, poNode, psPostUrl, psModalId, psTitle)">
342 356
   <div
343 357
     id="${psModalId}"
344 358
     class="modal hide"
@@ -360,7 +374,7 @@
360 374
           % if poNode!=None:
361 375
             <input type="hidden" name="node_id" value="${poNode.node_id}"/>
362 376
           % endif
363
-          <input type="hidden" name="parent_id" value="${piParentNodeId if piParentNodeId else 0}"/>
377
+          <input type="hidden" name="parent_id" value="${poParentNode.node_id if poParentNode else 0}"/>
364 378
           <input type="hidden" name="data_content" id="${psModalId}-textarea" />
365 379
         <div>
366 380
           <label>
@@ -383,6 +397,13 @@
383 397
           <label>${_('File description (optionnal)')}</label>
384 398
           ${POD.RichTextEditor(psModalId+'-textarea-wysiwyg', poNode.data_content if poNode!=None else '', '')}
385 399
         </div>
400
+        % if poParentNode and poParentNode.is_shared:
401
+          <p>
402
+            <input type="checkbox" name="inherit_rights" checked="checked"/>
403
+            ${_('Share:')}
404
+            <span class="pod-grey">${_('if checked, then copy share properties from current item')}</span>
405
+          </p>
406
+        % endif
386 407
       </form>
387 408
     ## MODAL BODY [END]
388 409
     </div>
@@ -407,7 +428,7 @@
407 428
   </div>
408 429
 </%def>
409 430
 
410
-<%def name="EventEditModalDialog(piParentNodeId, poNode, psPostUrl, psModalId, psTitle)">
431
+<%def name="EventEditModalDialog(poParentNode, poNode, psPostUrl, psModalId, psTitle)">
411 432
   <div
412 433
     id="${psModalId}"
413 434
     class="modal hide"
@@ -428,7 +449,7 @@
428 449
     <div class="modal-body">
429 450
     ###### MODAL BODY
430 451
       <form id='${psModalId}-form' action='${psPostUrl}' method='POST'>
431
-        <input type="hidden" name='parent_id' value='${current_node.node_id}'/>
452
+        <input type="hidden" name='parent_id' value="${poParentNode.node_id if poParentNode else 0}"/>
432 453
         <fieldset>
433 454
           <label>
434 455
             ${_('Event')}
@@ -448,6 +469,15 @@
448 469
               ${POD.RichTextEditor(psModalId+'-textarea-wysiwyg', poNode.data_content if poNode!=None else '', 'boldanditalic')}
449 470
             </div>
450 471
           </label>
472
+          % if poParentNode and poParentNode.is_shared:
473
+            <label>
474
+              <p>
475
+                <input type="checkbox" name="inherit_rights" checked="checked"/>
476
+                ${_('Share:')}
477
+                <span class="pod-grey">${_('if checked, then copy share properties from current item')}</span>
478
+              </p>
479
+            <label>
480
+          % endif
451 481
         </fieldset>
452 482
       </form>
453 483
     ###### MODAL BODY [END]
@@ -473,7 +503,7 @@
473 503
   </div>
474 504
 </%def>
475 505
 
476
-<%def name="ContactEditModalDialog(piParentNodeId, poNode, psPostUrl, psModalId, psTitle)">
506
+<%def name="ContactEditModalDialog(poParentNode, poNode, psPostUrl, psModalId, psTitle)">
477 507
   <div
478 508
     id="${psModalId}"
479 509
     class="modal hide"
@@ -495,7 +525,7 @@
495 525
           % if poNode!=None:
496 526
             <input type="hidden" name="node_id" value="${poNode.node_id}"/>
497 527
           % endif
498
-          <input type="hidden" name="parent_id" value="${piParentNodeId if piParentNodeId else 0}"/>
528
+          <input type="hidden" name="parent_id" value="${poParentNode.node_id if poParentNode else 0}"/>
499 529
           <input type="hidden" name="data_content" id="${psModalId}-textarea" />
500 530
         <div>
501 531
           <label>
@@ -513,6 +543,16 @@
513 543
           <label>${_('Address, phone, email, company...')}</label>
514 544
           ${POD.RichTextEditor(psModalId+'-textarea-wysiwyg', poNode.data_content if poNode!=None else '', 'boldanditalic')}
515 545
         </div>
546
+        % if poParentNode and poParentNode.is_shared:
547
+          <label>
548
+            <p>
549
+              <input type="checkbox" name="inherit_rights" checked="checked"/>
550
+              ${_('Share:')}
551
+              <span class="pod-grey">${_('if checked, then copy share properties from current item')}</span>
552
+            </p>
553
+          <label>
554
+        % endif
555
+
516 556
       </form>
517 557
     ## MODAL BODY [END]
518 558
     </div>

+ 6 - 6
pboard/pboard/templates/document.mak View File

@@ -65,7 +65,7 @@
65 65
 ## HERE COMES THE BREADCRUMB
66 66
 ##
67 67
   <div class="row">
68
-    ${DOC.BreadCrumb(current_node)}
68
+    ${DOC.BreadCrumb(current_node, allowed_nodes)}
69 69
   </div>
70 70
 
71 71
   <div class="row">
@@ -150,10 +150,10 @@
150 150
           ##
151 151
           ## HERE WE INCLUDE ALL MODAL DIALOG WHICH WILL BE ACCESSIBLE THROUGH TABS OR MENU
152 152
           ##
153
-          ${DOC.DocumentEditModalDialog(current_node.node_id, None, tg.url('/api/create_document'), h.ID.AddDocumentModalForm(current_node), _('New Sub-document'))}
154
-          ${DOC.EventEditModalDialog(current_node.node_id, None, tg.url('/api/create_event'), h.ID.AddEventModalForm(current_node), _('Add an event'))}
155
-          ${DOC.ContactEditModalDialog(current_node.node_id, None, tg.url('/api/create_contact'), h.ID.AddContactModalForm(current_node), _('Add a new contact'))}
156
-          ${DOC.FileEditModalDialog(current_node.node_id, None, tg.url('/api/create_file'), h.ID.AddFileModalForm(current_node), _('Add a new file'))}
153
+          ${DOC.DocumentEditModalDialog(current_node, None, tg.url('/api/create_document'), h.ID.AddDocumentModalForm(current_node), _('New Sub-document'))}
154
+          ${DOC.EventEditModalDialog(current_node, None, tg.url('/api/create_event'), h.ID.AddEventModalForm(current_node), _('Add an event'))}
155
+          ${DOC.ContactEditModalDialog(current_node, None, tg.url('/api/create_contact'), h.ID.AddContactModalForm(current_node), _('Add a new contact'))}
156
+          ${DOC.FileEditModalDialog(current_node, None, tg.url('/api/create_file'), h.ID.AddFileModalForm(current_node), _('Add a new file'))}
157 157
           ${DOC.MoveDocumentModalDialog(current_node, tg.url('/api/set_parent_node'), h.ID.MoveDocumentModalForm(current_node), _('Move the document'))}
158 158
 
159 159
           <div class="tabbable">
@@ -175,7 +175,7 @@
175 175
               <div class="tab-pane" id="subdocuments">${DOCTABS.SubdocumentContent(current_node)}</div>
176 176
               <div class="tab-pane active" id="events">${DOCTABS.EventTabContent(current_node)}</div>
177 177
               <div class="tab-pane" id="contacts">${DOCTABS.ContactTabContent(current_node)}</div>
178
-              <div class="tab-pane" id="comments">${DOCTABS.CommentTabContent(current_node)}</div>
178
+              <div class="tab-pane" id="comments">${DOCTABS.CommentTabContent(current_user, current_node)}</div>
179 179
               <div class="tab-pane" id="files">${DOCTABS.FileTabContent(current_node)}</div>
180 180
               <div class="tab-pane" id="history">${DOCTABS.HistoryTabContent(current_node)}</div>
181 181
               <div class="tab-pane" id="accessmanagement">${DOCTABS.AccessManagementTab(current_node)}</div>