app/soc/views/sitemap/sidebar.py
author Sverre Rabbelier <srabbelier@gmail.com>
Fri, 23 Jan 2009 21:20:33 +0000
changeset 935 09f47e08f805
parent 872 70e0b6d8ff73
child 972 43018f61b481
permissions -rw-r--r--
Adust the as_table tag to render a pick link if appropriate The templates are adjusted to pass on a 'reference' value, which is the url_name of the view from which the entity should be picked. The as_table (and related) function(s) construct and then pass on this argument and enable takes_contex so that we have access to the context of the enclosing template. We only extract ReferenceProperties that end with '_link_id' since that is how all RP's are currently named. It is not possible to create a field with the same name as the RP, as GAE will try to interpret it's contents as the key of an entity before even calling any function we can override. Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
     1
#!/usr/bin/python2.5
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
     2
#
31
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
31
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
637
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
    17
"""Module contains sidebar related functions.
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
    18
"""
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
    19
31
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
__authors__ = [
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
    21
    '"Sverre Rabbelier" <sverre@rabbelier.nl>',
31
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    22
  ]
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    23
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
615
1d09147de51f Fixed a bug in latest commit
Sverre Rabbelier <srabbelier@gmail.com>
parents: 614
diff changeset
    25
from soc.views import out_of_band
1d09147de51f Fixed a bug in latest commit
Sverre Rabbelier <srabbelier@gmail.com>
parents: 614
diff changeset
    26
from soc.views.helper import access
1d09147de51f Fixed a bug in latest commit
Sverre Rabbelier <srabbelier@gmail.com>
parents: 614
diff changeset
    27
637
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
    28
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
    29
SIDEBAR = []
872
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
    30
SIDEBAR_ACCESS_ARGS = ['SIDEBAR_CALLING']
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
    31
SIDEBAR_ACCESS_KWARGS = {'SIDEBAR_CALLING': True}
226
a92b11181a49 Update some of the URL patterns to get their link_name parsing from the new
Todd Larsen <tlarsen@google.com>
parents: 205
diff changeset
    32
31
8b43c541afa7 First iteration of a "prototype" Melange app, along with an initial Person
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    33
585
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    34
def addMenu(callback):
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    35
  """Adds a callback to the menu builder.
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    36
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    37
  The callback should return a list of menu's when called.
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    38
  """
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    39
493
6976c4d8d0ac Refactor the sidebar to use Django templates
Sverre Rabbelier <srabbelier@gmail.com>
parents: 284
diff changeset
    40
  global SIDEBAR
585
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    41
  SIDEBAR.append(callback)
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    42
586
a4a36b06a870 Make the sidebar dynamic depending on the user's rights
Sverre Rabbelier <srabbelier@gmail.com>
parents: 585
diff changeset
    43
def getSidebar(request):
714
3e2ce3d8057a Add missing dots in docstrings, proper sorting of imports and small docstring typo fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 704
diff changeset
    44
  """Constructs a sidebar for the specified request.
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    45
  """
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    46
585
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    47
  sidebar = []
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    48
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    49
  for callback in SIDEBAR:
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    50
    menus = callback(request)
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    51
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
    52
    for menu in (menus if menus else []):
589
ee9122db04af Fixes empty spaces appearing in the menu if a person is not allowed to see this menu or if no menu is defined.
Lennard de Rijk <ljvderijk@gmail.com>
parents: 586
diff changeset
    53
      sidebar.append(menu)
585
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    54
903890857ed8 Have the sidebar be rebuilt on every request with callbacks
Sverre Rabbelier <srabbelier@gmail.com>
parents: 493
diff changeset
    55
  return sidebar
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    56
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    57
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    58
def getSidebarItems(params):
637
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
    59
  """Retrieves a list of sidebar entries for this view.
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    60
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    61
  Params usage:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    62
    The params dictionary is provided to the menu_text's format.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    63
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    64
    sidebar: The sidebar value is returned directly if non-False
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    65
    sidebar_defaults: The sidebar_defaults are used to construct the
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    66
      sidebar items for this View. It is expected to be a tuple of
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    67
      three items, the item's url, it's menu_text, and it's
703
c4f3997becd9 Rename getSidebarLinks to getSidebarMenus
Sverre Rabbelier <srabbelier@gmail.com>
parents: 697
diff changeset
    68
      access_type, see getSidebarMenus on how access_type is used.
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    69
    sidebar_additional: The sidebar_additional values are appended
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    70
      to the list of items verbatim, and should be in the format
703
c4f3997becd9 Rename getSidebarLinks to getSidebarMenus
Sverre Rabbelier <srabbelier@gmail.com>
parents: 697
diff changeset
    71
      expected by getSidebarMenus.
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    72
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    73
  Args:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    74
    params: a dict with params for this View.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    75
  """
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    76
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    77
  # Return the found result
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    78
  if params['sidebar']:
840
d3f9fff0860b When constructing the sidebar don't overide 'sidebar'
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    79
    default = params['sidebar']
d3f9fff0860b When constructing the sidebar don't overide 'sidebar'
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    80
    result = default[:]
d3f9fff0860b When constructing the sidebar don't overide 'sidebar'
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    81
    for item in params['sidebar_additional']:
d3f9fff0860b When constructing the sidebar don't overide 'sidebar'
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    82
      result.append(item)
d3f9fff0860b When constructing the sidebar don't overide 'sidebar'
Sverre Rabbelier <srabbelier@gmail.com>
parents: 714
diff changeset
    83
    return result
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    84
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    85
  # Construct defaults manualy
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    86
  defaults = params['sidebar_defaults']
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    87
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    88
  result = []
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    89
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
    90
  for item in params['sidebar_additional']:
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
    91
    result.append(item)
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
    92
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    93
  for url, menu_text, access_type in defaults:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    94
    url = url % params['url_name'].lower()
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    95
    item = (url, menu_text % params, access_type)
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    96
    result.append(item)
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    97
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    98
  return result
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
    99
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   100
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   101
def getSidebarMenu(request, items, params):
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   102
  """Returns an dictionary with one sidebar entry.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   103
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   104
  Items is expected to be a tuple with an url, a menu_text, and an
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   105
  access_type. The access_type is then passed to checkAccess, if it
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   106
  raises out_of_band.Error, the item will not be added.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   107
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   108
  Args:
714
3e2ce3d8057a Add missing dots in docstrings, proper sorting of imports and small docstring typo fixes.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 704
diff changeset
   109
    request: the django request object
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   110
    items: see above
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   111
    params: a dict with params for this View
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   112
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   113
  Params usage:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   114
    The params dictionary is passed as argument to getSidebarItems,
637
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
   115
    see the docstring of getSidebarItems on how it uses it.
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   116
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   117
    rights: The rights dictionary is used to check if the user has
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   118
      the required rights to see a sidebar item.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   119
      See checkAccess for more details on how the rights dictionary
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   120
      is used to check access rights.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   121
    sidebar_heading: The sidebar_heading value is used to set the
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   122
      heading variable in the result.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   123
    name: The name value is used if sidebar_heading is not present.
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   124
637
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
   125
  Returns: 
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
   126
    A dictionary is returned with it's 'heading' value set as explained above.
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
   127
    It's 'items' value is constructed by calling _getSidebarItems. It constists
86ec079d8302 Some docstring and missing blank lines fixes in soc.views.sitemap modules.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 615
diff changeset
   128
    of dictionaries with a url and a title field.
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   129
  """
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   130
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   131
  rights = params['rights']
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   132
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   133
  submenus = []
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   134
872
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
   135
  args = SIDEBAR_ACCESS_ARGS
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
   136
  kwargs = SIDEBAR_ACCESS_KWARGS
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
   137
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   138
  for url, menu_text, access_type in items:
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   139
    try:
872
70e0b6d8ff73 Prepare access to receive args and kwargs as argument
Sverre Rabbelier <srabbelier@gmail.com>
parents: 840
diff changeset
   140
      access.checkAccess(access_type, request, rights, args, kwargs)
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   141
      submenus.append({'url': url, 'title': menu_text})
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   142
    except out_of_band.Error:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   143
      pass
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   144
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   145
  return submenus
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   146
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   147
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   148
def getSidebarMenus(request, params=None):
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   149
  """Constructs the default sidebar menu for a View.
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   150
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   151
  Calls getSidebarItems to retrieve the items that should be in the
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   152
  menu. Then passes the result to getSidebarMenu. See the respective
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   153
  docstrings for an explanation on what they do.
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   154
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   155
  Args:
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   156
    request: the django request object
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   157
    params: a dict with params for this View
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   158
  """
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   159
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   160
  items = getSidebarItems(params)
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   161
  submenus = getSidebarMenu(request, items, params)
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   162
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   163
  if not submenus:
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   164
    return
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   165
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
   166
  menu = {}
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   167
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   168
  if 'sidebar_heading' not in params:
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   169
    params['sidebar_heading'] = params['name']
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   170
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
   171
  menu['heading'] = params['sidebar_heading']
704
8647e6b441fc Factor out sidebar entry construction
Sverre Rabbelier <srabbelier@gmail.com>
parents: 703
diff changeset
   172
  menu['items'] = submenus
614
53a3e46fc512 Moved getSidebarLinks to sitemap.sidebar
Sverre Rabbelier <srabbelier@gmail.com>
parents: 589
diff changeset
   173
697
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
   174
  menus = [menu]
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
   175
190b65431579 Prepare for callbacks that return more than one menu
Sverre Rabbelier <srabbelier@gmail.com>
parents: 637
diff changeset
   176
  return menus