__init__.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from django.conf.urls import url
  2. from misago.conf import settings
  3. from misago.threads.views.attachment import attachment_server
  4. from misago.threads.views.goto import (
  5. ThreadGotoPostView, ThreadGotoLastView, ThreadGotoNewView, ThreadGotoBestAnswerView,
  6. ThreadGotoUnapprovedView, PrivateThreadGotoPostView, PrivateThreadGotoLastView,
  7. PrivateThreadGotoNewView
  8. )
  9. from misago.threads.views.list import ForumThreadsList, CategoryThreadsList, PrivateThreadsList
  10. from misago.threads.views.thread import ThreadView, PrivateThreadView
  11. LISTS_TYPES = ('all', 'my', 'new', 'unread', 'subscribed', 'unapproved', )
  12. def threads_list_patterns(prefix, view, patterns):
  13. urls = []
  14. for i, pattern in enumerate(patterns):
  15. if i > 0:
  16. url_name = '%s-%s' % (prefix, LISTS_TYPES[i])
  17. else:
  18. url_name = prefix
  19. urls.append(
  20. url(
  21. pattern,
  22. view.as_view(),
  23. name=url_name,
  24. kwargs={'list_type': LISTS_TYPES[i]},
  25. )
  26. )
  27. return urls
  28. if settings.MISAGO_THREADS_ON_INDEX:
  29. urlpatterns = threads_list_patterns(
  30. 'threads', ForumThreadsList,
  31. (r'^$', r'^my/$', r'^new/$', r'^unread/$', r'^subscribed/$', r'^unapproved/$', )
  32. )
  33. else:
  34. urlpatterns = threads_list_patterns(
  35. 'threads', ForumThreadsList, (
  36. r'^threads/$', r'^threads/my/$', r'^threads/new/$', r'^threads/unread/$',
  37. r'^threads/subscribed/$', r'^threads/unapproved/$',
  38. )
  39. )
  40. urlpatterns += threads_list_patterns(
  41. 'category', CategoryThreadsList, (
  42. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$',
  43. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/my/$',
  44. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/new/$',
  45. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unread/$',
  46. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/subscribed/$',
  47. r'^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unapproved/$',
  48. )
  49. )
  50. urlpatterns += threads_list_patterns(
  51. 'private-threads', PrivateThreadsList, (
  52. r'^private-threads/$', r'^private-threads/my/$', r'^private-threads/new/$',
  53. r'^private-threads/unread/$', r'^private-threads/subscribed/$',
  54. )
  55. )
  56. def thread_view_patterns(prefix, view):
  57. urls = [
  58. url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$' % prefix[0], view.as_view(), name=prefix),
  59. url(
  60. r'^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/(?P<page>\d+)/$' % prefix[0],
  61. view.as_view(),
  62. name=prefix
  63. ),
  64. ]
  65. return urls
  66. urlpatterns += thread_view_patterns('thread', ThreadView)
  67. urlpatterns += thread_view_patterns('private-thread', PrivateThreadView)
  68. def goto_patterns(prefix, **views):
  69. urls = []
  70. post_view = views.pop('post', None)
  71. if post_view:
  72. url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/post/(?P<post>\d+)/$' % prefix[0]
  73. url_name = '%s-post' % prefix
  74. urls.append(url(url_pattern, post_view.as_view(), name=url_name))
  75. for name, view in views.items():
  76. name = name.replace('_', '-')
  77. url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/%s/$' % (prefix[0], name)
  78. url_name = '%s-%s' % (prefix, name)
  79. urls.append(url(url_pattern, view.as_view(), name=url_name))
  80. return urls
  81. urlpatterns += goto_patterns(
  82. 'thread',
  83. post=ThreadGotoPostView,
  84. last=ThreadGotoLastView,
  85. new=ThreadGotoNewView,
  86. best_answer=ThreadGotoBestAnswerView,
  87. unapproved=ThreadGotoUnapprovedView,
  88. )
  89. urlpatterns += goto_patterns(
  90. 'private-thread',
  91. post=PrivateThreadGotoPostView,
  92. last=PrivateThreadGotoLastView,
  93. new=PrivateThreadGotoNewView,
  94. )
  95. urlpatterns += [
  96. url(r'^a/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/', attachment_server, name='attachment'),
  97. url(
  98. r'^a/thumb/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/',
  99. attachment_server,
  100. name='attachment-thumbnail',
  101. kwargs={'thumbnail': True}
  102. ),
  103. ]