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) |
|