app/soc/logic/site/map.py
changeset 517 661ab830e921
parent 516 ec1dcd70b97e
child 518 d9d31d316a74
equal deleted inserted replaced
516:ec1dcd70b97e 517:661ab830e921
     1 #!/usr/bin/python2.5
       
     2 #
       
     3 # Copyright 2008 the Melange authors.
       
     4 #
       
     5 # Licensed under the Apache License, Version 2.0 (the "License");
       
     6 # you may not use this file except in compliance with the License.
       
     7 # You may obtain a copy of the License at
       
     8 #
       
     9 #   http://www.apache.org/licenses/LICENSE-2.0
       
    10 #
       
    11 # Unless required by applicable law or agreed to in writing, software
       
    12 # distributed under the License is distributed on an "AS IS" BASIS,
       
    13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       
    14 # See the License for the specific language governing permissions and
       
    15 # limitations under the License.
       
    16 
       
    17 """Site map information, used to generate sidebar menus, urlpatterns, etc.
       
    18 """
       
    19 
       
    20 __authors__ = [
       
    21   '"Todd Larsen" <tlarsen@google.com>',
       
    22   ]
       
    23 
       
    24 
       
    25 from google.appengine.api import users
       
    26 
       
    27 from django.conf.urls import defaults
       
    28 
       
    29 from soc.logic import models
       
    30 from soc.logic import path_link_name
       
    31 from soc.logic.site import page
       
    32 
       
    33 import soc.logic.models.site_settings
       
    34 
       
    35 
       
    36 # Home Page view
       
    37 home = page.Page(
       
    38   page.Url(
       
    39     r'^$',
       
    40     'soc.views.models.site_settings.main_public'),
       
    41   'Google Open Source Programs',
       
    42   # it should be obvious that every page comes from the home page
       
    43   in_breadcrumb=False)
       
    44 
       
    45 # User sub-menu, changes depending on if User is signed-in or not
       
    46 user_signin_sub_menu = page.NonPage(
       
    47   'user-sign-in-sub-menu',
       
    48   'User',
       
    49   parent=home)
       
    50 
       
    51 user_signout_sub_menu = page.NonPage(
       
    52   'user-sign-out-sub-menu',
       
    53   'User',
       
    54   parent=home)
       
    55 
       
    56 # User authentication view placeholders
       
    57 # (these are not real Django views, but need to appear in menus, etc.)
       
    58 user_signin = page.Page(
       
    59   page.Url(
       
    60     # not a real Django URL regex, just a unique placeholder
       
    61     users.create_login_url('/'),
       
    62     # no view, since App Engine handles this page
       
    63     # (this page will not be placed in urlpatterns)
       
    64     None,
       
    65     # name is alternate string for view when it is not unique
       
    66     name='user-sign-in'),
       
    67   'User (sign in)',
       
    68   link_url=users.create_login_url('/'),
       
    69   parent=user_signin_sub_menu)
       
    70 
       
    71 user_signout = page.Page(
       
    72   page.Url(
       
    73     # not a real Django URL regex, just a unique placeholder
       
    74     users.create_logout_url('/'),
       
    75     # no view, since App Engine handles this page
       
    76     # (this page will not be placed in urlpatterns)
       
    77     None,
       
    78     # name is alternate string for view when it is not unique
       
    79     name='user-sign-out'),
       
    80   'User (sign out)',
       
    81   link_url=users.create_logout_url('/'),
       
    82   parent=user_signout_sub_menu)
       
    83 
       
    84 # User Profile views
       
    85 user_edit_self = page.Page(
       
    86   page.Url(
       
    87     r'^user/edit$',
       
    88     'soc.views.user.profile.create'),
       
    89   'User: Edit Your User Profile',
       
    90   short_name='Site-wide User Profile',
       
    91   parent=user_signout_sub_menu)
       
    92 
       
    93 # Site Home Page views
       
    94 site_home = page.Page(
       
    95   page.Url(
       
    96     r'^home$',
       
    97     'soc.views.models.site_settings.main_public'),
       
    98   'Google Open Source Programs',
       
    99   # it should be obvious that every page comes from the home page
       
   100   in_breadcrumb=False)
       
   101 
       
   102 
       
   103 site_sub_menu = page.NonPage(
       
   104   'site-sub-menu',
       
   105   'Site',
       
   106   parent=home)
       
   107 
       
   108 home_settings_sub_menu = page.NonPage(
       
   109   'home-settings-sub-menu',
       
   110   'Home Settings',
       
   111   parent=site_sub_menu)
       
   112 
       
   113 # Site Home Settings views
       
   114 home_settings_list = page.Page(
       
   115   page.Url(
       
   116     r'^home/list$',
       
   117     'soc.views.models.home_settings.list'),
       
   118   'Site: List Home Settings',
       
   119   short_name='List Home Settings',
       
   120   parent=home_settings_sub_menu)
       
   121 
       
   122 home_settings_create = page.Page(
       
   123   page.Url(
       
   124     r'^home/create$',
       
   125     'soc.views.models.home_settings.create'),
       
   126   'Site: Create New Home Settings',
       
   127   short_name='Create Home Settings',
       
   128   parent=home_settings_sub_menu)
       
   129 
       
   130 home_settings_edit = page.Page(
       
   131   page.Url(
       
   132     r'^home/edit/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   133     'soc.views.models.home_settings.edit'),
       
   134   'Site: Settings',
       
   135   short_name='Edit Site Settings',
       
   136   parent=home_settings_sub_menu)
       
   137 
       
   138 home_settings_show = page.Page(
       
   139   page.Url(
       
   140     r'^home/show/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   141     'soc.views.models.home_settings.public'),
       
   142   'Show Document',
       
   143   parent=home)
       
   144 
       
   145 
       
   146 site_settings_sub_menu = page.NonPage(
       
   147   'site-settings-sub-menu',
       
   148   'Site Settings',
       
   149   parent=site_sub_menu)
       
   150 
       
   151 # Site Home Settings views
       
   152 site_settings_list = page.Page(
       
   153   page.Url(
       
   154     r'^site/list$',
       
   155     'soc.views.models.site_settings.list'),
       
   156   'Site: List Site Settings',
       
   157   short_name='List Site Settings',
       
   158   parent=site_settings_sub_menu)
       
   159 
       
   160 site_settings_create = page.Page(
       
   161   page.Url(
       
   162     r'^site/create$',
       
   163     'soc.views.models.site_settings.create'),
       
   164   'Site: Create New Site Settings',
       
   165   short_name='Create Site Settings',
       
   166   parent=site_settings_sub_menu)
       
   167 
       
   168 site_settings_edit = page.Page(
       
   169   page.Url(
       
   170     r'^site/edit$',
       
   171     'soc.views.models.site_settings.main_edit'),
       
   172   'Site: Settings',
       
   173   short_name='Edit Main Site Settings',
       
   174   parent=site_settings_sub_menu)
       
   175 
       
   176 site_settings_edit = page.Page(
       
   177   page.Url(
       
   178     r'^site/edit/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   179     'soc.views.models.site_settings.edit'),
       
   180   'Site: Settings',
       
   181   short_name='Edit Site Settings',
       
   182   parent=site_settings_sub_menu)
       
   183 
       
   184 site_settings_show = page.Page(
       
   185   page.Url(
       
   186     r'^site/show/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   187     'soc.views.models.site_settings.public'),
       
   188   'Show Site Settings',
       
   189   parent=home)
       
   190 
       
   191 site_settings_delete = page.Page(
       
   192   page.Url(
       
   193     r'^site/delete/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   194     'soc.views.models.site_settings.delete'),
       
   195   'Delete Site Settings',
       
   196   parent=home)
       
   197 
       
   198 
       
   199 # User views
       
   200 user_sub_menu = page.NonPage(
       
   201   'site-user-sub-menu',
       
   202   'Site: Users Sub-Menu',
       
   203   short_name='Site Users',
       
   204   parent=site_sub_menu)
       
   205 
       
   206 site_user_lookup = page.Page(
       
   207   page.Url(
       
   208     r'^user/lookup$',
       
   209     'soc.views.site.user.profile.lookup'),
       
   210   'Site: Look Up an Existing User',
       
   211   short_name='Look Up Site User',
       
   212   parent=user_sub_menu)
       
   213 
       
   214 user_create = page.Page(
       
   215   page.Url(
       
   216     r'^user/create$',
       
   217     'soc.views.models.user.create'),
       
   218   'Site: Create New User Profile',
       
   219   short_name='Create Site User',
       
   220   parent=user_sub_menu)
       
   221 
       
   222 site_user_edit = page.Page(
       
   223   page.Url(
       
   224     r'^user/edit/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   225     'soc.views.models.user.edit'),
       
   226   'Site: Modify Existing User Profile',
       
   227   short_name='Modify Site User',
       
   228   parent=user_sub_menu)
       
   229 
       
   230 user_show = page.Page(
       
   231   page.Url(
       
   232     r'^user/show/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   233     'soc.views.models.user.public'),
       
   234   'User: Show Existing User Profile',
       
   235   parent=user_signout)
       
   236 
       
   237 user_list = page.Page(
       
   238   page.Url(
       
   239     r'^user/list$',
       
   240     'soc.views.models.user.list'),
       
   241   'Site: List of Users',
       
   242   short_name='List Site Users',
       
   243   parent=user_sub_menu)
       
   244 
       
   245 user_delete = page.Page(
       
   246   page.Url(
       
   247     r'^user/delete/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   248     'soc.views.models.user.delete'),
       
   249   'Site: Delete Existing User',
       
   250   short_name='Delete Site User',
       
   251   parent=user_sub_menu)
       
   252 
       
   253 
       
   254 # Document views
       
   255 document_show = page.Page(
       
   256   page.Url(
       
   257     r'^document/show/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   258     'soc.views.models.document.public'),
       
   259   'Show Document',
       
   260   parent=home)
       
   261 
       
   262 # Site Document views
       
   263 site_document_sub_menu = page.NonPage(
       
   264   'site-document-sub-menu',
       
   265   'Site: Documents Sub-Menu',
       
   266   short_name='Site Documents',
       
   267   parent=site_sub_menu)
       
   268 
       
   269 site_document_create = page.Page(
       
   270   page.Url(
       
   271     r'^document/create$',
       
   272     'soc.views.models.document.create'),
       
   273   'Site: Create New Document',
       
   274   'Create Site Document',
       
   275   parent=site_document_sub_menu)
       
   276 
       
   277 site_document_edit = page.Page(
       
   278   page.Url(
       
   279     r'^document/edit/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   280     'soc.views.models.document.edit'),
       
   281   'Site: Modify Existing Document',
       
   282   short_name='Modify Site Document',
       
   283   parent=site_document_sub_menu)
       
   284 
       
   285 site_document_delete = page.Page(
       
   286   page.Url(
       
   287     r'^document/delete/%s$' % path_link_name.PATH_LINK_ID_ARGS_PATTERN,
       
   288     'soc.views.models.document.delete'),
       
   289   'Site: Delete Existing Document',
       
   290   short_name='Delete Site Document',
       
   291   parent=site_document_sub_menu)
       
   292 
       
   293 site_document_list = page.Page(
       
   294   page.Url(
       
   295     r'^document/list$',
       
   296     'soc.views.models.document.list'),
       
   297   'Site: List of Documents',
       
   298   short_name='List Site Documents',
       
   299   parent=site_document_sub_menu)
       
   300 
       
   301 # Sponsor Group public view
       
   302 sponsor_profile = page.Page(
       
   303   page.Url(
       
   304     r'^sponsor/show/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   305     'soc.views.models.sponsor.public'),
       
   306   'Sponsor Public Profile',
       
   307   parent=home)
       
   308 
       
   309 # Sponsor Group Site views
       
   310 site_sponsor_sub_menu = page.NonPage(
       
   311   'site-sponsor-sub-menu',
       
   312   'Site: Sponsors Sub-Menu',
       
   313   short_name='Site Sponsors',
       
   314   parent=site_sub_menu)
       
   315 
       
   316 site_sponsor_create = page.Page(
       
   317   page.Url(
       
   318     r'^sponsor/create$',
       
   319     'soc.views.models.sponsor.create'),
       
   320   'Site: Create New Sponsor',
       
   321   short_name='Create Site Sponsor',
       
   322   parent=site_sponsor_sub_menu)
       
   323 
       
   324 site_sponsor_delete = page.Page(
       
   325   page.Url(
       
   326     r'^sponsor/delete/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   327     'soc.views.models.sponsor.delete'),
       
   328   'Site: Delete Existing Sponsor',
       
   329   short_name='Delete Site Sponsor',
       
   330   parent=site_sponsor_sub_menu)
       
   331 
       
   332 site_sponsor_edit = page.Page(
       
   333   page.Url(
       
   334     r'^sponsor/edit/%s$' % path_link_name.LINK_ID_ARG_PATTERN,
       
   335     'soc.views.models.sponsor.edit'),
       
   336   'Site: Modify Existing Sponsor',
       
   337   short_name='Modify Site Sponsor',
       
   338   parent=site_sponsor_sub_menu)
       
   339 
       
   340 site_sponsor_list = page.Page(
       
   341   page.Url(
       
   342     r'^sponsor/list$',
       
   343     'soc.views.models.sponsor.list'),
       
   344   'Site: List of Sponsors',
       
   345   short_name='List Site Sponsors',
       
   346   parent=site_sponsor_sub_menu)
       
   347 
       
   348 # Host public view
       
   349 host_profile = page.Page(
       
   350   page.Url(
       
   351       r'^host/show/(?P<sponsor_ln>%(lnp)s)/(?P<user_ln>%(lnp)s)$' % {
       
   352           'lnp': path_link_name.LINK_ID_PATTERN_CORE},
       
   353     'soc.views.models.host.public'),
       
   354   'Host Public Profile',
       
   355   parent=home)
       
   356 
       
   357 # Host Site views
       
   358 site_host_sub_menu = page.NonPage(
       
   359   'site-host-sub-menu',
       
   360   'Site: Host Sub-Menu',
       
   361   short_name='Site Hosts',
       
   362   parent=site_sub_menu)
       
   363 
       
   364 site_host_create = page.Page(
       
   365   page.Url(
       
   366     r'^host/create$',
       
   367     'soc.views.models.host.create'),
       
   368   'Site: Create New Host',
       
   369   short_name='Create Site Host',
       
   370   parent=site_host_sub_menu)
       
   371 
       
   372 site_host_delete = page.Page(
       
   373   page.Url(
       
   374     r'^host/delete/(?P<sponsor_ln>%(lnp)s)/(?P<user_ln>%(lnp)s)$' % {
       
   375           'lnp': path_link_name.LINK_ID_PATTERN_CORE},
       
   376     'soc.views.models.host.delete'),
       
   377   'Site: Delete Existing Host',
       
   378   short_name='Delete Site Host',
       
   379   parent=site_host_sub_menu)
       
   380 
       
   381 site_host_edit = page.Page(
       
   382   page.Url(
       
   383     r'^host/edit/(?P<sponsor_ln>%(lnp)s)/(?P<user_ln>%(lnp)s)$' % {
       
   384           'lnp': path_link_name.LINK_ID_PATTERN_CORE},
       
   385     'soc.views.models.host.edit'),
       
   386   'Site: Modify Existing Host',
       
   387   short_name='Modify Site Host',
       
   388   parent=site_host_sub_menu)
       
   389 
       
   390 site_host_list = page.Page(
       
   391   page.Url(
       
   392     r'^host/list$',
       
   393     'soc.views.models.host.list'),
       
   394   'Site: List of Hosts',
       
   395   short_name='List Site Hosts',
       
   396   parent=site_host_sub_menu)
       
   397 
       
   398 # these are not really used...
       
   399 #    (r'^org/profile/(?P<program>ghop[_0-9a-z]+)/(?P<link_id>[_0-9a-z]+)/$',
       
   400 #     'soc.views.person.profile.edit',
       
   401 #     {'template': 'ghop/person/profile/edit.html'}),
       
   402 #    (r'^org/profile/(?P<program>[_0-9a-z]+)/(?P<link_id>[_0-9a-z]+)/$',
       
   403 #     'soc.views.person.profile.edit'),
       
   404 
       
   405 
       
   406 ROOT_PAGES = [
       
   407   # /, first level of the sidebar menu, excluded from breadcrumbs
       
   408   home,
       
   409 
       
   410   # alternate view of /, no menu presence
       
   411   site_home,
       
   412 ]
       
   413 
       
   414 
       
   415 def getDjangoUrlPatterns(pages=ROOT_PAGES):
       
   416   """Returns Django urlpatterns derived from the site map Pages.
       
   417 
       
   418   Args:
       
   419     pages: a list of page.Page objects from which to generate urlpatterns
       
   420       (from them and from their child Pages); default is ROOT_PAGES
       
   421 
       
   422   Raises:
       
   423     KeyError if more than one Page has the same urlpattern.
       
   424 
       
   425     TODO(tlarsen): this probably does not work correctly, currently, since
       
   426     page.Page.makeDjangoUrls() returns a list, and this routine is
       
   427     combining lists from potentially multiple page hierarchies.  Each list
       
   428     might have a urlpattern that the other contains, but this won't be
       
   429     detected by the current code (will Django catch this?).  This really
       
   430     needs to be detected earlier via a global Page dictionary.
       
   431   """
       
   432   urlpatterns = ['']
       
   433 
       
   434   for page in pages:
       
   435     urlpatterns.extend(page.makeDjangoUrls())
       
   436 
       
   437   return defaults.patterns(*urlpatterns)