/basic/groups/views.py

https://github.com/kcunning/django-basic-apps · Python · 477 lines · 249 code · 57 blank · 171 comment · 29 complexity · 4c24f5df9761aa60452b5d6fc6ba2c12 MD5 · raw file

  1. from django.shortcuts import get_object_or_404, render_to_response
  2. from django.http import HttpResponseRedirect
  3. from django.template import RequestContext
  4. from django.core.urlresolvers import reverse
  5. from django.contrib.auth.decorators import login_required
  6. from django.contrib.auth.models import User
  7. from django.views.generic import date_based
  8. from django.db.models import Q
  9. from basic.groups.decorators import *
  10. from basic.groups.models import *
  11. from basic.groups.forms import *
  12. def group_list(request, username=None, segment=None, template_name='groups/group_list.html'):
  13. """
  14. Returns a group list page.
  15. Templates: ``groups/group_list.html``
  16. Context:
  17. group_list
  18. Group object list
  19. """
  20. group_list = Group.objects.filter(is_active=True)
  21. return render_to_response(template_name, {
  22. 'group_list': group_list
  23. }, context_instance=RequestContext(request))
  24. @login_required
  25. def group_create(request, template_name='groups/group_form.html'):
  26. """
  27. Returns a group form page.
  28. Templates: ``groups/group_form.html``
  29. Context:
  30. form
  31. GroupForm object
  32. """
  33. if request.method == 'POST':
  34. form = GroupForm(request.POST, request.FILES)
  35. if form.is_valid():
  36. group = form.save(commit=False)
  37. group.creator = request.user
  38. group.save()
  39. creator = GroupMember.objects.create(user=request.user, group=group, status=0)
  40. return HttpResponseRedirect(group.get_absolute_url())
  41. else:
  42. form = GroupForm()
  43. return render_to_response(template_name, {'form': form}, context_instance=RequestContext(request))
  44. def group_detail(request, slug, template_name='groups/group_detail.html'):
  45. """
  46. Returns a group detail page.
  47. Templates: ``groups/group_detail.html``
  48. Context:
  49. group
  50. Group object
  51. """
  52. group = get_object_or_404(Group, slug=slug, is_active=True)
  53. if group.invite_only and not GroupMember.objects.is_member(group, request.user):
  54. return HttpResponseRedirect(reverse('group_join', kwargs={'slug': group.slug}))
  55. return render_to_response(template_name, {
  56. 'group': group,
  57. 'topic_list': group.topics.all(),
  58. }, context_instance=RequestContext(request))
  59. @ownership_required
  60. def group_edit(request, slug, template_name='groups/group_form.html'):
  61. """
  62. Returns a group form page.
  63. Templates: ``groups/group_form.html``
  64. Context:
  65. form
  66. GroupForm object
  67. group
  68. Group object
  69. """
  70. group = get_object_or_404(Group, slug=slug, creator=request.user)
  71. if request.method == 'POST':
  72. form = GroupForm(request.POST, request.FILES, instance=group)
  73. if form.is_valid():
  74. form.save()
  75. return HttpResponseRedirect(group.get_absolute_url())
  76. else:
  77. form = GroupForm(instance=group)
  78. return render_to_response(template_name, {
  79. 'form': form,
  80. 'group': group
  81. }, context_instance=RequestContext(request))
  82. @ownership_required
  83. def group_remove(request, slug, template_name='groups/group_remove_confirm.html'):
  84. """
  85. Returns a group delete confirmation page.
  86. Templates: ``groups/group_remove_confirm.html``
  87. Context:
  88. group
  89. Group object
  90. """
  91. group = get_object_or_404(Group, slug=slug, creator=request.user)
  92. if request.method == 'POST':
  93. group.is_active = False
  94. group.save()
  95. return HttpResponseRedirect(reverse('groups'))
  96. return render_to_response(template_name, {'group': group}, context_instance=RequestContext(request))
  97. def group_page(request, slug, page_slug, template_name='groups/group_page.html'):
  98. """
  99. Returns a group page.
  100. Templates: ``groups/group_page.html``
  101. Context:
  102. group
  103. Group object
  104. page
  105. GroupPage object
  106. """
  107. group = get_object_or_404(Group, slug=slug)
  108. page = get_object_or_404(GroupPage, group=group, slug=page_slug)
  109. return render_to_response(template_name, {
  110. 'group': group,
  111. 'page': page
  112. }, context_instance=RequestContext(request))
  113. @ownership_required
  114. def group_page_create(request, slug, page_slug,
  115. template_name='groups/group_page_form.html'):
  116. group = get_object_or_404(Group, slug=slug)
  117. form = GroupPageForm(initial={'group': group})
  118. if request.method == 'POST':
  119. form = GroupPageForm(request.POST)
  120. if form.is_valid():
  121. page = form.save()
  122. return HttpResponseRedirect(page.get_absolute_url())
  123. return render_to_response(template_name, {
  124. 'group': group,
  125. 'form': form
  126. }, context_instance=RequestContext(request))
  127. @ownership_required
  128. def group_page_edit(request, slug, page_slug,
  129. template_name='groups/group_page_form.html'):
  130. group = get_object_or_404(Group, slug=slug)
  131. page = get_object_or_404(GroupPage, group=group, slug=page_slug)
  132. form = GroupPageForm(instance=page)
  133. if request.method == 'POST':
  134. form = GroupPageForm(request.POST)
  135. if form.is_valid():
  136. page = form.save()
  137. return HttpResponseRedirect(page.get_absolute_url())
  138. return render_to_response(template_name, {
  139. 'group': group,
  140. 'page': page,
  141. 'form': form
  142. }, context_instance=RequestContext(request))
  143. @ownership_required
  144. def group_page_remove(request, slug, page_slug,
  145. template_name='groups/group_page_remove_confirm.html'):
  146. group = get_object_or_404(Group, slug=slug)
  147. page = get_object_or_404(GroupPage, group=group, slug=page_slug)
  148. if request.method == 'POST':
  149. page.delete()
  150. return HttpResponseRedirect(group.get_absolute_url())
  151. return render_to_response(template_name, {
  152. 'group': group,
  153. 'page': page
  154. }, context_instance=RequestContext(request))
  155. #
  156. # Group members
  157. #
  158. def group_members(request, slug, template_name='groups/group_members.html'):
  159. """
  160. Returns members of a group.
  161. Templates: ``groups/group_members.html``
  162. Context:
  163. group
  164. Group object
  165. member_list
  166. User objects
  167. """
  168. group = get_object_or_404(Group, slug=slug, is_active=True)
  169. member_list = group.members.all()
  170. return render_to_response(template_name, {
  171. 'group': group,
  172. 'member_list': member_list
  173. }, context_instance=RequestContext(request))
  174. @login_required
  175. def group_join(request, slug, template_name='groups/group_join_confirm.html'):
  176. """
  177. Returns a group join confirmation page.
  178. Templates: ``groups/group_join_confirm.html``
  179. Context:
  180. group
  181. Group object
  182. """
  183. group = get_object_or_404(Group, slug=slug, is_active=True)
  184. if request.method == 'POST':
  185. membership = GroupMember(group=group, user=request.user)
  186. membership.save()
  187. return HttpResponseRedirect(group.get_absolute_url())
  188. return render_to_response(template_name, {'group': group}, context_instance=RequestContext(request))
  189. @membership_required
  190. def group_invite(request, slug, template_name='groups/group_invite.html'):
  191. """
  192. Returns an invite form.
  193. Templates: ``groups/group_invite.html``
  194. Context:
  195. form
  196. InviteForm object
  197. """
  198. group = get_object_or_404(Group, slug=slug, is_active=True)
  199. form = InviteForm(initial={'group': group.pk, 'user': request.user.pk})
  200. return render_to_response(template_name, {
  201. 'group': group,
  202. 'form': form
  203. }, context_instance=RequestContext(request))
  204. #
  205. # Group topics
  206. #
  207. def topic_list(request, slug, template_name='groups/topic_list.html'):
  208. """
  209. Returns a group topic list page.
  210. Templates: ``groups/topic_list.html``
  211. Context:
  212. group
  213. Group object
  214. topic_list
  215. GroupTopic object list
  216. """
  217. group = get_object_or_404(Group, slug=slug, is_active=True)
  218. topic_list = GroupTopic.objects.filter(group=group, is_active=True)
  219. return render_to_response(template_name, {
  220. 'group': group,
  221. 'topic_list': topic_list
  222. }, context_instance=RequestContext(request))
  223. @membership_required
  224. def topic_create(request, slug, template_name='groups/topic_form.html'):
  225. """
  226. Returns a group topic form page.
  227. Templates: ``groups/topic_form.html``
  228. Context:
  229. form
  230. GroupTopicForm object
  231. """
  232. group = get_object_or_404(Group, slug=slug)
  233. if request.method == 'POST':
  234. form = GroupTopicForm(request.POST)
  235. if form.is_valid():
  236. topic = form.save(commit=False)
  237. topic.user = request.user
  238. topic.group = group
  239. topic.save()
  240. return HttpResponseRedirect(topic.get_absolute_url())
  241. else:
  242. form = GroupTopicForm()
  243. return render_to_response(template_name, {
  244. 'form': form,
  245. 'group': group
  246. }, context_instance=RequestContext(request))
  247. def topic_detail(request, slug, topic_id, template_name='groups/topic_detail.html'):
  248. """
  249. Returns a group topic detail page.
  250. Templates: ``groups/topic_detail.html``
  251. Context:
  252. topic
  253. GroupTopic object
  254. group
  255. Group object
  256. """
  257. group = get_object_or_404(Group, slug=slug, is_active=True)
  258. topic = get_object_or_404(GroupTopic, pk=topic_id, is_active=True)
  259. message_form = GroupMessageForm()
  260. return render_to_response(template_name, {
  261. 'group': group,
  262. 'topic': topic,
  263. 'message_form': message_form,
  264. }, context_instance=RequestContext(request))
  265. @membership_required
  266. def topic_edit(request, topic_id, template_name='groups/topic_form.html'):
  267. """
  268. Returns a group topic form page.
  269. Templates: ``groups/topic_form.html``
  270. Context:
  271. form
  272. GroupTopicForm object
  273. topic
  274. GroupTopic object
  275. """
  276. group = get_object_or_404(Group, slug=slug)
  277. topic = get_object_or_404(GroupTopic, pk=topic_id, group=group, user=request.user)
  278. if request.method == 'POST':
  279. form = GroupTopicForm(request.POST, instance=topic)
  280. if form.is_valid():
  281. form.save()
  282. return HttpResponseRedirect(topic.get_absolute_url())
  283. else:
  284. form = GroupTopicForm(instance=topic)
  285. return render_to_response(template_name, {
  286. 'form': form,
  287. 'group': group,
  288. 'topic': topic
  289. }, context_instance=RequestContext(request))
  290. @membership_required
  291. def topic_remove(request, topic_id, template_name='groups/topic_remove_confirm.html'):
  292. """
  293. Returns a group topic delete confirmation page.
  294. Templates: ``groups/topic_remove_confirm.html``
  295. Context:
  296. topic
  297. GroupTopic object
  298. """
  299. group = get_object_or_404(Group, slug=slug)
  300. topic = get_object_or_404(GroupTopic, pk=topic_id, group=group, user=request.user)
  301. if request.method == 'POST':
  302. topic.is_active = False
  303. topic.save()
  304. return HttpResponseRedirect(group.get_absolute_url())
  305. return render_to_response(template_name, {'topic': topic}, context_instance=RequestContext(request))
  306. def topic_moderate(request, topic_id, template_name='groups/topic_moderate_confirm.html'):
  307. pass
  308. #
  309. # Group messages
  310. #
  311. def message_detail(request, slug, topic_id, message_id, template_name='groups/message_detail.html'):
  312. """
  313. Returns a message detail page.
  314. Templates: ``groups/message_detail.html``
  315. Context:
  316. group
  317. Group object
  318. topic
  319. GroupTopic object
  320. message
  321. GroupMessage object
  322. """
  323. group = get_object_or_404(Group, slug=slug, is_active=True)
  324. topic = get_object_or_404(GroupTopic, pk=topic_id, is_active=True)
  325. message = get_object_or_404(GroupMessage, pk=message_id, is_active=True)
  326. return render_to_response(template_name, {
  327. 'group': group,
  328. 'topic': topic,
  329. 'message': message
  330. }, context_instance=RequestContext(request))
  331. @membership_required
  332. def message_create(request, slug, topic_id, template_name='groups/message_form.html'):
  333. """
  334. Returns a group message form.
  335. Templates: ``groups/message_form.html``
  336. Context:
  337. form
  338. GroupMessageForm object
  339. """
  340. group = get_object_or_404(Group, slug=slug)
  341. topic = get_object_or_404(GroupTopic, pk=topic_id, group=group)
  342. if request.method == 'POST':
  343. form = GroupMessageForm(request.POST)
  344. if form.is_valid():
  345. message = form.save(commit=False)
  346. message.user = request.user
  347. message.topic = topic
  348. message.save()
  349. return HttpResponseRedirect(topic.get_absolute_url())
  350. else:
  351. form = GroupMessageForm()
  352. return render_to_response(template_name, {
  353. 'form': form,
  354. 'group': group,
  355. 'topic': topic,
  356. }, context_instance=RequestContext(request))
  357. @membership_required
  358. def message_edit(request, message_id, template_name='groups/message_form.html'):
  359. """
  360. Returns a group message edit form.
  361. Templates: ``groups/message_form.html``
  362. Context:
  363. form
  364. GroupMessageForm object
  365. message
  366. GroupMessage object
  367. """
  368. message = get_object_or_404(GroupMessage, pk=message_id, is_active=True)
  369. if request.method == 'POST':
  370. form = GroupMessageForm(request.POST, instance=message)
  371. if form.is_valid():
  372. form.save()
  373. return HttpResponseRedirect(message.topic.get_absolute_url())
  374. else:
  375. form = GroupMessageForm(instance=message)
  376. return render_to_response(template_name, {
  377. 'form': form,
  378. 'message': message,
  379. 'group': message.topic.group,
  380. 'topic': message.topic
  381. }, context_instance=RequestContext(request))
  382. @membership_required
  383. def message_remove(request, message_id, template_name='groups/message_remove_confirm.html'):
  384. """
  385. Returns a message delete confirmation page.
  386. Templates: ``groups/message_remove_confirm.html``
  387. Context:
  388. message
  389. GroupMessage object
  390. """
  391. message = get_object_or_404(GroupMessage, pk=message_id, is_active=True)
  392. if request.method == 'POST':
  393. message.is_active = False
  394. message.save()
  395. return HttpResponseRedirect(message.topic.get_absolute_url())
  396. return render_to_response(template_name, {
  397. 'message': message,
  398. 'group': message.topic.group,
  399. 'topic': message.topic
  400. }, context_instance=RequestContext(request))
  401. def message_moderate(request, message_id, template_name='groups/message_moderate_confirm.html'):
  402. pass