3 # Copyright (C) 2012 FinalsClub Foundation
4 """ Controller for the KarmaNotes website """
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
11 from karmaworld.apps.ajaxuploader.views import ajax_uploader
12 from karmaworld.apps.courses.models import Course
13 from karmaworld.apps.courses.views import AboutView
14 from karmaworld.apps.courses.views import CourseDetailView
15 from karmaworld.apps.courses.views import CourseListView
16 from karmaworld.apps.courses.views import school_list
17 from karmaworld.apps.courses.views import school_course_list
18 from karmaworld.apps.courses.views import school_course_instructor_list
19 from karmaworld.apps.notes.views import NoteView
20 from karmaworld.apps.notes.views import RawNoteDetailView
21 from karmaworld.apps.notes.views import PDFView
22 from karmaworld.apps.document_upload.views import save_fp_upload
24 # See: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#hooking-adminsite-instances-into-your-urlconf
27 # reused named regex capture groups
28 SLUG = r'(?P<{0}slug>[-A-Za-z0-9_]+)'
31 # ex: SLUG.format('') :> (?P<slug>[-A-Za-z0-9_]+)
32 # ex: SLUG.format('school_') :> (?P<school_slug>[-A-Za-z0-9_]+)
35 url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '/'
36 CourseDetailView.as_view(), name='course_detail'),
38 (?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
39 NoteView.as_view(), name='note_detail_pk'),
42 SCHOOL_SLUG = r'(?P<school_slug>[-A-Za-z0-9_]+)'
43 COURSE_SLUG = r'(?P<course_slug>[-A-Za-z0-9_]+)'
44 NOTE_SLUG = r'(?P<slug>[-A-Za-z0-9_]+)'
46 # See: https://docs.djangoproject.com/en/dev/topics/http/urls/
47 urlpatterns = patterns('',
48 ## Administrative URLpatterns
49 # Admin panel and documentation:
50 url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
51 url(r'^admin/', include(admin.site.urls)),
52 # Grappelli django-admin improvment suite
53 url(r'^grappelli/', include('grappelli.urls')),
55 ## Single-serving page URLpatterns
56 url(r'^terms/$', direct_to_template, { 'template': 'terms.html' }, name='terms'),
57 url(r'^about/$', AboutView.as_view(), name='about'),
59 # VIEW for viewing a Note's gdrive generated html, used as iframe
60 url(r'^raw/(?P<pk>\d+)$', RawNoteDetailView.as_view(), name='note_raw'),
61 #url(r'^pdfview$', PDFView.as_view(), name='pdf'),
62 url(r'^pdfview/(?P<pk>\d+)$', PDFView.as_view(), name='pdf'),
65 url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
66 {'document_root': settings.MEDIA_ROOT, }),
69 url(r'^api/upload$', save_fp_upload, name='upload_post'),
70 # VIEW for displaying a single Course
71 url(r'^' + SLUG.format('school_') + '/' + SLUG.format('') + '$',
72 CourseDetailView.as_view(), name='course_detail'),
75 # Valid url cases to the Note page
77 # b: school/course/id/slug
79 # note file as id, for notes without titles yet
80 url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<pk>[\d^/]+)$', \
81 NoteView.as_view(), name='note_detail_pk'),
82 # note file by note.slug
83 url(r'^' + SLUG.format('school_') + '/' + SLUG.format('course_') +'/'+ SLUG.format('') +'$',
84 NoteView.as_view(), name='note_detail'),
85 #url(r'^(?P<school_slug>[^/]+)/(?P<course_slug>[^/]+)/(?P<slug>[^/]+)$', \
86 # NoteView.as_view(), name='note_detail'),
88 # ---- JSON views ----#
90 url(r'^ajax-upload$', ajax_uploader, name='ajax_upload'),
91 # return json list of schools
92 url(r'^school/list/$', school_list, name='json_school_list'),
93 # return json list of courses for a given school
94 url(r'^school/course/list/$', school_course_list, name='json_school_course_list'),
95 # return json list of instructors for a given school and course
96 url(r'^school/course/instructors/list/$', school_course_instructor_list, name='json_school_course_instructor_list'),
97 # ---- end JSON views ----#
99 url(r'^$', CourseListView.as_view(model=Course), name='home'),