initial attempt at #273 to replace HTML in database with static file HTML
[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.defaults import patterns, include, url
9 from django.views.generic.simple import direct_to_template
10
11 from karmaworld.apps.courses.models import Course
12 from karmaworld.apps.courses.views import AboutView, flag_course
13 from karmaworld.apps.courses.views import CourseDetailView
14 from karmaworld.apps.courses.views import CourseListView
15 from karmaworld.apps.courses.views import school_list
16 from karmaworld.apps.courses.views import school_course_list
17 from karmaworld.apps.courses.views import school_course_instructor_list
18 from karmaworld.apps.notes.views import NoteView, thank_note, NoteSearchView, flag_note
19 from karmaworld.apps.notes.views import RawNoteDetailView
20 from karmaworld.apps.notes.views import PDFView
21 from karmaworld.apps.moderation import moderator
22 from karmaworld.apps.document_upload.views import save_fp_upload
23 from karmaworld.apps.users.views import ProfileView
24
25 # See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf
26
27
28 admin.autodiscover()
29
30 # reused named regex capture groups
31 SLUG = r'(?P<{0}slug>[-A-Za-z0-9_]+)'
32
33 """
34 # ex: SLUG.format('')  :> (?P<slug>[-A-Za-z0-9_]+)
35 # ex: SLUG.format('school_')  :> (?P<school_slug>[-A-Za-z0-9_]+)
36
37   ex: course url
38   url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '/'
39         CourseDetailView.as_view(), name='course_detail'),
40
41   (?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
42         NoteView.as_view(), name='note_detail_pk'),
43 """
44
45 SCHOOL_SLUG = r'(?P<school_slug>[-A-Za-z0-9_]+)'
46 COURSE_SLUG = r'(?P<course_slug>[-A-Za-z0-9_]+)'
47 NOTE_SLUG   = r'(?P<slug>[-A-Za-z0-9_]+)'
48
49 # See: https://docs.djangoproject.com/en/dev/topics/http/urls/
50 urlpatterns = patterns('',
51     ## Administrative URLpatterns
52     # Admin panel and documentation:
53     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
54     url(r'^admin/', include(admin.site.urls)),
55     # Grappelli django-admin improvment suite
56     url(r'^grappelli/', include('grappelli.urls')),
57     # Moderator panel and documentation:
58     url(r'^moderator/doc/', include('django.contrib.admindocs.urls')),
59     url(r'^moderator/', include(moderator.site.urls)),
60
61     ## Single-serving page URLpatterns
62     url(r'^terms/$', direct_to_template, { 'template': 'terms.html' }, name='terms'),
63     url(r'^about/$', AboutView.as_view(), name='about'),
64
65     # All Auth
66     url(r'^accounts/', include('allauth.urls')),
67     url(r'^accounts/profile/', ProfileView.as_view(), name='accounts_profile'),
68
69     #url(r'^pdfview$', PDFView.as_view(), name='pdf'),
70     url(r'^pdfview/(?P<pk>\d+)$', PDFView.as_view(), name='pdf'),
71
72     # Media handling
73     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
74             {'document_root': settings.MEDIA_ROOT, }),
75
76     # Filepicker upload
77     url(r'^api/upload$', save_fp_upload, name='upload_post'),
78     # VIEW for displaying a single Course
79     url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '$',
80         CourseDetailView.as_view(), name='course_detail'),
81
82     ## NOTE MODEL
83     # Ajax endpoint to thank a note
84     url(r'^ajax/note/thank/(?P<pk>[\d]+)/$', thank_note, name='thank_note'),
85     # Ajax endpoint to flag a note
86     url(r'^ajax/note/flag/(?P<pk>[\d]+)/$', flag_note, name='flag_note'),
87     # Ajax endpoint to flag a course
88     url(r'^ajax/course/flag/(?P<pk>[\d]+)/$', flag_course, name='flag_course'),
89
90     # Valid url cases to the Note page
91     # a: school/course/id
92     # b: school/course/id/slug
93     # c: s../c../slug
94     # note file as id, for notes without titles yet
95     url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
96         NoteView.as_view(), name='note_detail_pk'),
97     # note file by note.slug
98     url(r'^' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'$',
99         NoteView.as_view(), name='note_detail'),
100     #url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<slug>[^/]+)$', \
101     #    NoteView.as_view(), name='note_detail'),
102
103     # ---- JSON views ----#
104     # return json list of schools
105     url(r'^school/list/$', school_list, name='json_school_list'),
106     # return json list of courses for a given school
107     url(r'^school/course/list/$', school_course_list, name='json_school_course_list'),
108     # return json list of instructors for a given school and course
109     url(r'^school/course/instructors/list/$', school_course_instructor_list, name='json_school_course_instructor_list'),
110     # ---- end JSON views ----#
111
112     url(r'^search/$', NoteSearchView.as_view(), name='note_search'),
113
114     url(r'^$', CourseListView.as_view(model=Course), name='home'),
115 )