__init__.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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,
  6. ThreadGotoLastView,
  7. ThreadGotoNewView,
  8. ThreadGotoBestAnswerView,
  9. ThreadGotoUnapprovedView,
  10. PrivateThreadGotoPostView,
  11. PrivateThreadGotoLastView,
  12. PrivateThreadGotoNewView,
  13. )
  14. from misago.threads.views.list import (
  15. ForumThreadsList,
  16. CategoryThreadsList,
  17. PrivateThreadsList,
  18. )
  19. from misago.threads.views.thread import ThreadView, PrivateThreadView
  20. LISTS_TYPES = ("all", "my", "new", "unread", "subscribed", "unapproved")
  21. def threads_list_patterns(prefix, view, patterns):
  22. urls = []
  23. for i, pattern in enumerate(patterns):
  24. if i > 0:
  25. url_name = "%s-%s" % (prefix, LISTS_TYPES[i])
  26. else:
  27. url_name = prefix
  28. urls.append(
  29. url(
  30. pattern,
  31. view.as_view(),
  32. name=url_name,
  33. kwargs={"list_type": LISTS_TYPES[i]},
  34. )
  35. )
  36. return urls
  37. if settings.MISAGO_THREADS_ON_INDEX:
  38. urlpatterns = threads_list_patterns(
  39. "threads",
  40. ForumThreadsList,
  41. (r"^$", r"^my/$", r"^new/$", r"^unread/$", r"^subscribed/$", r"^unapproved/$"),
  42. )
  43. else:
  44. urlpatterns = threads_list_patterns(
  45. "threads",
  46. ForumThreadsList,
  47. (
  48. r"^threads/$",
  49. r"^threads/my/$",
  50. r"^threads/new/$",
  51. r"^threads/unread/$",
  52. r"^threads/subscribed/$",
  53. r"^threads/unapproved/$",
  54. ),
  55. )
  56. urlpatterns += threads_list_patterns(
  57. "category",
  58. CategoryThreadsList,
  59. (
  60. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$",
  61. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/my/$",
  62. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/new/$",
  63. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unread/$",
  64. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/subscribed/$",
  65. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unapproved/$",
  66. ),
  67. )
  68. urlpatterns += threads_list_patterns(
  69. "private-threads",
  70. PrivateThreadsList,
  71. (
  72. r"^private-threads/$",
  73. r"^private-threads/my/$",
  74. r"^private-threads/new/$",
  75. r"^private-threads/unread/$",
  76. r"^private-threads/subscribed/$",
  77. ),
  78. )
  79. def thread_view_patterns(prefix, view):
  80. urls = [
  81. url(
  82. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$" % prefix[0],
  83. view.as_view(),
  84. name=prefix,
  85. ),
  86. url(
  87. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/(?P<page>\d+)/$" % prefix[0],
  88. view.as_view(),
  89. name=prefix,
  90. ),
  91. ]
  92. return urls
  93. urlpatterns += thread_view_patterns("thread", ThreadView)
  94. urlpatterns += thread_view_patterns("private-thread", PrivateThreadView)
  95. def goto_patterns(prefix, **views):
  96. urls = []
  97. post_view = views.pop("post", None)
  98. if post_view:
  99. url_pattern = (
  100. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/post/(?P<post>\d+)/$" % prefix[0]
  101. )
  102. url_name = "%s-post" % prefix
  103. urls.append(url(url_pattern, post_view.as_view(), name=url_name))
  104. for name, view in views.items():
  105. name = name.replace("_", "-")
  106. url_pattern = r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/%s/$" % (
  107. prefix[0],
  108. name,
  109. )
  110. url_name = "%s-%s" % (prefix, name)
  111. urls.append(url(url_pattern, view.as_view(), name=url_name))
  112. return urls
  113. urlpatterns += goto_patterns(
  114. "thread",
  115. post=ThreadGotoPostView,
  116. last=ThreadGotoLastView,
  117. new=ThreadGotoNewView,
  118. best_answer=ThreadGotoBestAnswerView,
  119. unapproved=ThreadGotoUnapprovedView,
  120. )
  121. urlpatterns += goto_patterns(
  122. "private-thread",
  123. post=PrivateThreadGotoPostView,
  124. last=PrivateThreadGotoLastView,
  125. new=PrivateThreadGotoNewView,
  126. )
  127. urlpatterns += [
  128. url(
  129. r"^a/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/",
  130. attachment_server,
  131. name="attachment",
  132. ),
  133. url(
  134. r"^a/thumb/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/",
  135. attachment_server,
  136. name="attachment-thumbnail",
  137. kwargs={"thumbnail": True},
  138. ),
  139. ]