replacing test code with proper code
[oweals/karmaworld.git] / karmaworld / urls.py
1 #!/usr/bin/env python
2 # -*- coding:utf8 -*-
3 # Copyright (C) 2012  FinalsClub Foundation
4 """ Controller for the KarmaNotes website """
5
6 from django.contrib import admin
7 from django.conf import settings
8 from django.conf.urls import patterns, include, url
9 from django.views.generic.base import TemplateView
10
11 from karmaworld.apps.courses.views import AboutView, flag_course, edit_course, course_list_ajax
12 from karmaworld.apps.courses.views import CourseDetailView
13 from karmaworld.apps.courses.views import CourseListView
14 from karmaworld.apps.courses.views import school_course_list
15 from karmaworld.apps.courses.views import school_course_instructor_list
16 from karmaworld.apps.notes.views import NoteView, thank_note, NoteSearchView, flag_note, downloaded_note, edit_note_tags, \
17     NoteKeywordsView, NoteQuizView, NoteDeleteView
18 from karmaworld.apps.moderation import moderator
19 from karmaworld.apps.document_upload.views import save_fp_upload
20 from karmaworld.apps.quizzes.views import set_delete_keyword_annotator, get_keywords_annotator
21 from karmaworld.apps.users.views import ProfileView
22
23 # See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf
24 admin.autodiscover()
25
26 # reused named regex capture groups
27 SLUG = r'(?P<{0}slug>[-A-Za-z0-9_]+)'
28 """
29 # ex: SLUG.format('')  :> (?P<slug>[-A-Za-z0-9_]+)
30 # ex: SLUG.format('school_')  :> (?P<school_slug>[-A-Za-z0-9_]+)
31
32   ex: course url
33   url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '/'
34         CourseDetailView.as_view(), name='course_detail'),
35
36   (?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
37         NoteView.as_view(), name='note_detail_pk'),
38 """
39
40 urlpatterns = patterns('',
41     ## Administrative URLpatterns
42     # Admin panel and documentation:
43     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
44     url(r'^admin/', include(admin.site.urls)),
45     # Grappelli django-admin improvment suite
46     url(r'^grappelli/', include('grappelli.urls')),
47     # Moderator panel and documentation:
48     url(r'^moderator/doc/', include('django.contrib.admindocs.urls')),
49     url(r'^moderator/', include(moderator.site.urls)),
50
51     # support AJAX lookup endpoints
52     url(r'^lookups/', include('ajax_select.urls')),
53
54     ## Single-serving page URLpatterns
55     url(r'^terms/$', TemplateView.as_view(template_name='terms.html'), name='terms'),
56     url(r'^about/$', AboutView.as_view(), name='about'),
57
58     # All Auth
59     url(r'^accounts/', include('allauth.urls')),
60     url(r'^accounts/profile/', ProfileView.as_view(), name='accounts_profile'),
61
62     # Media handling
63     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
64             {'document_root': settings.MEDIA_ROOT, }),
65
66     # Filepicker upload
67     url(r'^api/upload$', save_fp_upload, name='upload_post'),
68
69     # ---- JSON views ----#
70     # return json list of courses for a given school
71     url(r'^school/course/list/$', school_course_list, name='json_school_course_list'),
72     # return json list of instructors for a given school and course
73     url(r'^school/course/instructors/list/$', school_course_instructor_list, name='json_school_course_instructor_list'),
74     # ---- end JSON views ----#
75
76     url(r'^search/$', NoteSearchView.as_view(), name='note_search'),
77
78     ## Course Model
79     # VIEW for displaying a single Course
80     url(r'^course/' + SLUG.format('') + '/$',
81         CourseDetailView.as_view(), name='course_detail'),
82
83     ## Note Model
84     url(r'^ajax/courses/$', course_list_ajax, name='course_list_ajax'),
85     # Ajax endpoint to thank a note
86     url(r'^ajax/note/thank/(?P<pk>[\d]+)/$', thank_note, name='thank_note'),
87     # Ajax endpoint to flag a note
88     url(r'^ajax/note/flag/(?P<pk>[\d]+)/$', flag_note, name='flag_note'),
89     # Ajax endpoint to update a notes tags
90     url(r'^ajax/note/tags/(?P<pk>[\d]+)/$', edit_note_tags, name='edit_note_tags'),
91     # Ajax endpoint to record that somebody downloaded a note
92     url(r'^ajax/note/downloaded/(?P<pk>[\d]+)/$', downloaded_note, name='downloaded_note'),
93     # Ajax endpoint to flag a course
94     url(r'^ajax/course/flag/(?P<pk>[\d]+)/$', flag_course, name='flag_course'),
95     # Ajax endpoint to edit a course
96     url(r'^ajax/course/edit/(?P<pk>[\d]+)/$', edit_course, name='edit_course'),
97
98     url(r'^ajax/annotations/annotations$', set_delete_keyword_annotator, name='set_keyword'),
99     url(r'^ajax/annotations/search/$', get_keywords_annotator, name='get_keywords'),
100
101
102     # Valid url cases to the Note page
103     # a: school/course/id
104     # b: school/course/id/slug
105     # c: s../c../slug
106     # note file as id, for notes without titles yet
107     url(r'^note/(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
108         NoteView.as_view(), name='note_detail_pk'),
109     # note file by note.slug
110     url(r'^note/' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'$',
111         NoteView.as_view(), name='note_detail'),
112     url(r'^note/' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'/keywords/$',
113         NoteKeywordsView.as_view(), name='note_keywords'),
114     url(r'^note/' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'/quiz/$',
115         NoteQuizView.as_view(), name='note_quiz'),
116
117     url(r'note/delete/$', NoteDeleteView.as_view(), name='note_delete'),
118
119     url(r'^$', CourseListView.as_view(), name='home'),
120 )
121
122
123 if settings.DEBUG:
124     import debug_toolbar
125     urlpatterns += patterns('',
126         url(r'^__debug__/', include(debug_toolbar.urls)),
127     )
128