Merge lp:~terriko/postorius/membersettings into lp:postorius

Proposed by Terri
Status: Merged
Merged at revision: 173
Proposed branch: lp:~terriko/postorius/membersettings
Merge into: lp:postorius
Diff against target: 183 lines (+133/-2)
5 files modified
src/postorius/templates/postorius/lists/memberoptions.html (+77/-0)
src/postorius/templates/postorius/lists/members.html (+2/-1)
src/postorius/urls.py (+3/-0)
src/postorius/views/list.py (+51/-0)
src/postorius/views/user.py (+0/-1)
To merge this branch: bzr merge lp:~terriko/postorius/membersettings
Reviewer Review Type Date Requested Status
Mailman Coders Pending
Review via email: mp+216207@code.launchpad.net
To post a comment you must log in.
lp:~terriko/postorius/membersettings updated
173. By Terri

Putting in a note about why I was weird about the preferences displayed

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'src/postorius/templates/postorius/lists/memberoptions.html'
2--- src/postorius/templates/postorius/lists/memberoptions.html 1970-01-01 00:00:00 +0000
3+++ src/postorius/templates/postorius/lists/memberoptions.html 2014-04-16 20:38:21 +0000
4@@ -0,0 +1,77 @@
5+{% extends postorius_base_template %}
6+{% load url from future %}
7+{% load i18n %}
8+{% block main %}
9+{% if not user.is_superuser or not user.is_list_owner %}
10+ <div class="mm_subHeader" >
11+ <h1>{% trans "No Preferences Available" %}</h1>
12+ </div>
13+ <p>{% trans 'You are not the owner for this list' %}</p>
14+{% else %}
15+ <form class="well" action="" method="post" >
16+ {% csrf_token %}
17+ <table class="table table-bordered table-striped" border="2">
18+ <thead>
19+ <tr>
20+ <th>{% trans 'Preference' %}</th>
21+ <th>{% trans 'Setting' %} </th>
22+ </tr>
23+ </thead >
24+ <tr>
25+ <td>
26+ <p>{% trans 'Mail Delivery:' %} </p>
27+ </p>
28+ [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.delivery_status.help_text }}
29+ </span></span>] </p>
30+ </td>
31+ <td> {{settingsform.delivery_status }} </td>
32+ </tr>
33+ <tr>
34+ <td>
35+ <p>{% trans 'Mode of Delivery:' %}</p>
36+ <p>
37+ [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.delivery_mode.help_text }}
38+ </span></span>] </p>
39+ </td>
40+ <td> {{settingsform.delivery_mode }} </td>
41+ </tr>
42+ <tr>
43+ <td>
44+ <p>{% trans 'Receive own posts to the list?' %}</p>
45+ <p>
46+ [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.receive_own_postings.help_text }}
47+ </span></span>] </p>
48+ </td>
49+ <td> {{settingsform.receive_own_postings }} </td>
50+ </tr>
51+ <tr>
52+ <td>
53+ <p>{% trans 'Receive acknowledgement mails?' %}</p>
54+ </p>
55+ [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.acknowledge_posts.help_text }}
56+ </span></span>] </p>
57+ </td>
58+ <td> {{settingsform.acknowledge_posts }} </td>
59+ </tr>
60+ <tr>
61+ <td>
62+ <p>{% trans 'Conceal address from the subscriber list?' %}</p>
63+ </p>
64+ [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.hide_address.help_text }}
65+ </span></span>] </p>
66+ </td>
67+ <td> {{settingsform.hide_address }} </td>
68+ </tr>
69+ <tr>
70+ <td>
71+ <p>{% trans 'Avoid duplicate copies of messages? ' %}</p>
72+ </p> [<span class="more_info"><a href="#" target="_blank">More info</a><span>{{ settingsform.receive_list_copy.help_text }}
73+ </span></span>] </p>
74+ </td>
75+ <td> {{settingsform.receive_list_copy }} </td>
76+ </tr>
77+ </table>
78+ <center><button class="btn btn-success" type="submit">{% trans "Save" %}</button></center>
79+ </form>
80+{% endif %}
81+{% endblock main %}
82
83=== modified file 'src/postorius/templates/postorius/lists/members.html'
84--- src/postorius/templates/postorius/lists/members.html 2014-04-14 22:08:30 +0000
85+++ src/postorius/templates/postorius/lists/members.html 2014-04-16 20:38:21 +0000
86@@ -73,7 +73,8 @@
87 <tbody>
88 {% for member in list.member_page %}
89 <tr>
90- <td>{{ member.address }}</td>
91+ <td> <a href="{% url 'list_member_options' list.fqdn_listname member.address %}">
92+ {{ member.address }}</a></td>
93 <td>{% trans member.role %}</td>
94 <td>
95 <a href="{% url 'list_unsubscribe' list.fqdn_listname member.address %}" class="btn btn-mini btn-danger">{% trans 'Unsubscribe' %}</a>
96
97=== modified file 'src/postorius/urls.py'
98--- src/postorius/urls.py 2014-04-15 22:33:50 +0000
99+++ src/postorius/urls.py 2014-04-16 20:38:21 +0000
100@@ -31,6 +31,9 @@
101 url(r'^members/$',
102 ListMembersView.as_view(
103 ), name='list_members'),
104+ url(r'^members/options/(?P<email>[^/]+)/$',
105+ ListMemberOptionsView.as_view(
106+ ), name='list_member_options'),
107 url(r'^metrics$',
108 ListMetricsView.as_view(
109 ), name='list_metrics'),
110
111=== modified file 'src/postorius/views/list.py'
112--- src/postorius/views/list.py 2014-04-15 19:12:27 +0000
113+++ src/postorius/views/list.py 2014-04-16 20:38:21 +0000
114@@ -97,6 +97,57 @@
115 'moderator_form': moderator_form},
116 context_instance=RequestContext(request))
117
118+class ListMemberOptionsView(MailingListView):
119+ '''View the preferences for a single member of a mailing list'''
120+
121+ @method_decorator(list_owner_required)
122+ def post(self, request, fqdn_listname, email):
123+ try:
124+ mm_member = utils.get_client().get_member(fqdn_listname, email)
125+
126+ preferences_form = UserPreferences(request.POST)
127+ if preferences_form.is_valid():
128+ preferences = mm_member.preferences
129+ for key in preferences_form.fields.keys():
130+ preferences[key] = preferences_form.cleaned_data[key]
131+ preferences.save()
132+ messages.success(
133+ request, 'The member\'s preferences have been updated.')
134+ else:
135+ messages.error(request, 'Something went wrong.')
136+
137+ # this is a bit silly, since we already have the preferences,
138+ # but I want to be sure we don't show stale data.
139+ settingsform = UserPreferences(initial=mm_member.preferences)
140+ except MailmanApiError:
141+ return utils.render_api_error(request)
142+ except HTTPError, e:
143+ messages.error(request, e.msg)
144+ return render_to_response(
145+ 'postorius/lists/memberoptions.html',
146+ {'mm_member': mm_member,
147+ 'settingsform': settingsform,
148+ },
149+ context_instance=RequestContext(request))
150+
151+ @method_decorator(list_owner_required)
152+ def get(self, request, fqdn_listname, email):
153+ try:
154+ mm_member = utils.get_client().get_member(fqdn_listname, email)
155+ settingsform = UserPreferences(initial=mm_member.preferences)
156+ except MailmanApiError:
157+ return utils.render_api_error(request)
158+ except Mailman404Error:
159+ return render_to_response(
160+ 'postorius/lists/memberoptions.html',
161+ {'nolists': 'true'},
162+ context_instance=RequestContext(request))
163+ return render_to_response(
164+ 'postorius/lists/memberoptions.html',
165+ {'mm_member': mm_member,
166+ 'settingsform': settingsform,
167+ },
168+ context_instance=RequestContext(request))
169
170 class ListMetricsView(MailingListView):
171
172
173=== modified file 'src/postorius/views/user.py'
174--- src/postorius/views/user.py 2014-04-15 22:17:47 +0000
175+++ src/postorius/views/user.py 2014-04-16 20:38:21 +0000
176@@ -202,7 +202,6 @@
177 'formset': formset},
178 context_instance=RequestContext(request))
179
180-
181 class UserSummaryView(MailmanUserView):
182
183 """Shows a summary of a user.

Subscribers

People subscribed via source and target branches