|
41 | 41 | from tempfile import mkstemp |
42 | 42 | from collections import OrderedDict, defaultdict |
43 | 43 |
|
| 44 | +from django import forms |
44 | 45 | from django.conf import settings |
45 | 46 | from django.contrib.auth.decorators import login_required |
46 | 47 | from django.db.models.aggregates import Max |
|
65 | 66 | from ietf.group.forms import (GroupForm, StatusUpdateForm, ConcludeGroupForm, StreamEditForm, |
66 | 67 | ManageReviewRequestForm, EmailOpenAssignmentsForm, ReviewerSettingsForm, |
67 | 68 | AddUnavailablePeriodForm, EndUnavailablePeriodForm, ReviewSecretarySettingsForm, ) |
68 | | -from ietf.group.mails import email_admin_re_charter, email_personnel_change |
| 69 | +from ietf.group.mails import email_admin_re_charter, email_personnel_change, email_comment |
69 | 70 | from ietf.group.models import ( Group, Role, GroupEvent, GroupStateTransitions, GroupURL, ChangeStateGroupEvent ) |
70 | 71 | from ietf.group.utils import (get_charter_text, can_manage_group_type, |
71 | 72 | milestone_reviewer_for_group_type, can_provide_status_update, |
|
74 | 75 | save_group_in_history, can_manage_group, |
75 | 76 | get_group_or_404, setup_default_community_list_for_group, ) |
76 | 77 | # |
77 | | -from ietf.ietfauth.utils import has_role |
| 78 | +from ietf.ietfauth.utils import has_role, is_authorized_in_group |
78 | 79 | from ietf.mailtrigger.utils import gather_relevant_expansions |
79 | 80 | from ietf.meeting.helpers import get_meeting |
80 | 81 | from ietf.meeting.utils import group_sessions |
@@ -632,10 +633,13 @@ def history(request, acronym, group_type=None): |
632 | 633 | group = get_group_or_404(acronym, group_type) |
633 | 634 |
|
634 | 635 | events = group.groupevent_set.all().select_related('by').order_by('-time', '-id') |
| 636 | + can_add_comment = is_authorized_in_group(request.user,group) |
635 | 637 |
|
636 | 638 | return render(request, 'group/history.html', |
637 | 639 | construct_group_menu_context(request, group, "history", group_type, { |
| 640 | + "group": group, |
638 | 641 | "events": events, |
| 642 | + "can_add_comment": can_add_comment, |
639 | 643 | })) |
640 | 644 |
|
641 | 645 | def materials(request, acronym, group_type=None): |
@@ -1784,4 +1788,24 @@ def change_review_secretary_settings(request, acronym, group_type=None): |
1784 | 1788 | 'back_url': back_url, |
1785 | 1789 | 'settings_form': settings_form, |
1786 | 1790 | }) |
| 1791 | + |
| 1792 | +class AddCommentForm(forms.Form): |
| 1793 | + comment = forms.CharField(required=True, widget=forms.Textarea, strip=False) |
| 1794 | + |
| 1795 | +def add_comment(request, acronym, group_type=None): |
| 1796 | + group = get_group_or_404(acronym, group_type) |
| 1797 | + |
| 1798 | + if not is_authorized_in_group(request.user,group): |
| 1799 | + return HttpResponseForbidden("You need to a chair, secretary, or delegate of this group to add a comment.") |
1787 | 1800 |
|
| 1801 | + if request.method == 'POST': |
| 1802 | + form = AddCommentForm(request.POST) |
| 1803 | + if form.is_valid(): |
| 1804 | + comment = form.cleaned_data['comment'] |
| 1805 | + event = GroupEvent.objects.create(group=group,desc=comment,type="added_comment",by=request.user.person) |
| 1806 | + email_comment(request,event) |
| 1807 | + return redirect('ietf.group.views.history', acronym=group.acronym) |
| 1808 | + else: |
| 1809 | + form = AddCommentForm() |
| 1810 | + |
| 1811 | + return render(request, 'group/add_comment.html', { 'group':group, 'form':form, }) |
0 commit comments