Merge lp:~benste/mailmanweb/main_dev into lp:mailmanweb
- main_dev
- Merge into trunk
Status: | Needs review | ||||
---|---|---|---|---|---|
Proposed branch: | lp:~benste/mailmanweb/main_dev | ||||
Merge into: | lp:mailmanweb | ||||
Diff against target: |
437 lines (+85/-56) (has conflicts) 3 files modified
dev_setup/settings.py (+2/-0) src/mailmanweb/templates/mailmanweb/base.html (+7/-0) src/mailmanweb/views.py (+76/-56) Text conflict in src/mailmanweb/views.py |
||||
To merge this branch: | bzr merge lp:~benste/mailmanweb/main_dev | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Florian Fuchs | Approve | ||
Review via email:
|
Commit message
Merge - added Django Messaging Framework - fixes lp920084 - by benste
Description of the change
Dear Terri and Flo,
the long promissed change which got delayed due to my old revisions ...
No CSS for new class mm_message included
+ For some strange reason the message Tag / Type seems not to be stored hence we don't get a special class e.g. for a warningn
Unmerged revisions
- 35. By benste
-
changed all render error, error and message vars in views.py to new messaging frame
- 33. By Terri
-
Made it so that the settings menu doesn't disappear when you change settings.
- 32. By Terri
-
Assorted fixes to make sure the settings forms will submit correctly. This
should fix the enums and booleans, but does not fix acceptable_aliases (which
needs to submit a set of unicode strings) - 31. By Terri
-
Fixes to the settings page, mostly making sure we use the right enums for
things. - 30. By Terri
-
Removing settings templates that we've decided not to use
- 29. By Terri
-
Merged
- 28. By Terri
-
Regrouping of the list settings pages.
- 27. By Terri
-
Rearranging settings in a way that hopefully makes sense.
Preview Diff
1 | === modified file 'dev_setup/settings.py' | |||
2 | --- dev_setup/settings.py 2012-03-13 03:58:06 +0000 | |||
3 | +++ dev_setup/settings.py 2012-03-14 19:51:23 +0000 | |||
4 | @@ -102,6 +102,7 @@ | |||
5 | 102 | 102 | ||
6 | 103 | TEMPLATE_CONTEXT_PROCESSORS = ( | 103 | TEMPLATE_CONTEXT_PROCESSORS = ( |
7 | 104 | "django.contrib.auth.context_processors.auth", | 104 | "django.contrib.auth.context_processors.auth", |
8 | 105 | "django.contrib.messages.context_processors.messages", | ||
9 | 105 | "django.core.context_processors.debug", | 106 | "django.core.context_processors.debug", |
10 | 106 | "django.core.context_processors.i18n", | 107 | "django.core.context_processors.i18n", |
11 | 107 | "django.core.context_processors.media", | 108 | "django.core.context_processors.media", |
12 | @@ -138,6 +139,7 @@ | |||
13 | 138 | 139 | ||
14 | 139 | INSTALLED_APPS = ( | 140 | INSTALLED_APPS = ( |
15 | 140 | 'django.contrib.auth', | 141 | 'django.contrib.auth', |
16 | 142 | 'django.contrib.messages', | ||
17 | 141 | 'django.contrib.contenttypes', | 143 | 'django.contrib.contenttypes', |
18 | 142 | 'django.contrib.sessions', | 144 | 'django.contrib.sessions', |
19 | 143 | 'django.contrib.sites', | 145 | 'django.contrib.sites', |
20 | 144 | 146 | ||
21 | === modified file 'src/mailmanweb/templates/mailmanweb/base.html' | |||
22 | --- src/mailmanweb/templates/mailmanweb/base.html 2012-03-14 17:43:32 +0000 | |||
23 | +++ src/mailmanweb/templates/mailmanweb/base.html 2012-03-14 19:51:23 +0000 | |||
24 | @@ -50,6 +50,13 @@ | |||
25 | 50 | </header> | 50 | </header> |
26 | 51 | 51 | ||
27 | 52 | <div class="mm_main mm_canvas"> | 52 | <div class="mm_main mm_canvas"> |
28 | 53 | {% if messages %} | ||
29 | 54 | <ul class="mm_messages"> | ||
30 | 55 | {% for message in messages %} | ||
31 | 56 | <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li> | ||
32 | 57 | {% endfor %} | ||
33 | 58 | </ul> | ||
34 | 59 | {% endif %} | ||
35 | 53 | {% block main %}{% endblock main %} | 60 | {% block main %}{% endblock main %} |
36 | 54 | </div> | 61 | </div> |
37 | 55 | <div id="mm_footer"> | 62 | <div id="mm_footer"> |
38 | 56 | 63 | ||
39 | === modified file 'src/mailmanweb/views.py' | |||
40 | --- src/mailmanweb/views.py 2012-03-14 17:45:34 +0000 | |||
41 | +++ src/mailmanweb/views.py 2012-03-14 19:51:23 +0000 | |||
42 | @@ -23,6 +23,7 @@ | |||
43 | 23 | 23 | ||
44 | 24 | 24 | ||
45 | 25 | from django.conf import settings | 25 | from django.conf import settings |
46 | 26 | from django.contrib import messages | ||
47 | 26 | from django.contrib.auth import logout, authenticate, login | 27 | from django.contrib.auth import logout, authenticate, login |
48 | 27 | from django.contrib.auth.decorators import login_required, permission_required | 28 | from django.contrib.auth.decorators import login_required, permission_required |
49 | 28 | from django.contrib.auth.forms import AuthenticationForm | 29 | from django.contrib.auth.forms import AuthenticationForm |
50 | @@ -53,15 +54,26 @@ | |||
51 | 53 | try: | 54 | try: |
52 | 54 | existing_domains = Domain.objects.all() | 55 | existing_domains = Domain.objects.all() |
53 | 55 | logger.debug(Domain.objects) | 56 | logger.debug(Domain.objects) |
54 | 57 | <<<<<<< TREE | ||
55 | 56 | except MailmanApiError: | 58 | except MailmanApiError: |
56 | 57 | return utils.render_api_error(request) | 59 | return utils.render_api_error(request) |
57 | 58 | return render_to_response('mailmanweb/domain_index.html', {'domains':existing_domains,}, | 60 | return render_to_response('mailmanweb/domain_index.html', {'domains':existing_domains,}, |
58 | 61 | ======= | ||
59 | 62 | except MailmanApiError, e: | ||
60 | 63 | messages.error(request,e) | ||
61 | 64 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
62 | 65 | return render_to_response(template, {'domains':existing_domains,}, | ||
63 | 66 | >>>>>>> MERGE-SOURCE | ||
64 | 59 | context_instance=RequestContext(request)) | 67 | context_instance=RequestContext(request)) |
65 | 60 | 68 | ||
66 | 61 | @login_required | 69 | @login_required |
67 | 62 | @permission_required('server_admin') | 70 | @permission_required('server_admin') |
68 | 71 | <<<<<<< TREE | ||
69 | 63 | def domain_new(request): | 72 | def domain_new(request): |
70 | 64 | message = None | 73 | message = None |
71 | 74 | ======= | ||
72 | 75 | def domain_new(request, template = 'mailmanweb/domain_new.html'): | ||
73 | 76 | >>>>>>> MERGE-SOURCE | ||
74 | 65 | if request.method == 'POST': | 77 | if request.method == 'POST': |
75 | 66 | form = DomainNew(request.POST) | 78 | form = DomainNew(request.POST) |
76 | 67 | if form.is_valid(): | 79 | if form.is_valid(): |
77 | @@ -70,15 +82,23 @@ | |||
78 | 70 | description=form.cleaned_data['description']) | 82 | description=form.cleaned_data['description']) |
79 | 71 | try: | 83 | try: |
80 | 72 | domain.save() | 84 | domain.save() |
83 | 73 | except MailmanApiError: | 85 | except MailmanApiError, e: |
84 | 74 | return utils.render_api_error(request) | 86 | messages.error(request,e) |
85 | 87 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
86 | 75 | except HTTPError, e: | 88 | except HTTPError, e: |
88 | 76 | message=e | 89 | messages.error(request,e) |
89 | 90 | else: | ||
90 | 91 | messages.success(request,_("New Domain registered")) | ||
91 | 77 | return redirect("domain_index") | 92 | return redirect("domain_index") |
92 | 78 | else: | 93 | else: |
93 | 79 | form = DomainNew() | 94 | form = DomainNew() |
94 | 95 | <<<<<<< TREE | ||
95 | 80 | return render_to_response('mailmanweb/domain_new.html', | 96 | return render_to_response('mailmanweb/domain_new.html', |
96 | 81 | {'form': form,'message': message}, | 97 | {'form': form,'message': message}, |
97 | 98 | ======= | ||
98 | 99 | return render_to_response(template, | ||
99 | 100 | {'form': form}, | ||
100 | 101 | >>>>>>> MERGE-SOURCE | ||
101 | 82 | context_instance=RequestContext(request)) | 102 | context_instance=RequestContext(request)) |
102 | 83 | 103 | ||
103 | 84 | @login_required | 104 | @login_required |
104 | @@ -92,14 +112,13 @@ | |||
105 | 92 | filled in before the last POST request is returned. The user must | 112 | filled in before the last POST request is returned. The user must |
106 | 93 | be logged in to create a new list. | 113 | be logged in to create a new list. |
107 | 94 | """ | 114 | """ |
108 | 95 | error = None | ||
109 | 96 | message = None | ||
110 | 97 | mailing_list = None | 115 | mailing_list = None |
111 | 98 | if request.method == 'POST': | 116 | if request.method == 'POST': |
112 | 99 | try: | 117 | try: |
113 | 100 | domains = Domain.objects.all() | 118 | domains = Domain.objects.all() |
116 | 101 | except MailmanApiError: | 119 | except MailmanApiError, e: |
117 | 102 | return utils.render_api_error(request) | 120 | messages.error(request,e) |
118 | 121 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
119 | 103 | choosable_domains = [("",_("Choose a Domain"))] | 122 | choosable_domains = [("",_("Choose a Domain"))] |
120 | 104 | for domain in domains: | 123 | for domain in domains: |
121 | 105 | choosable_domains.append((domain.mail_host, | 124 | choosable_domains.append((domain.mail_host, |
122 | @@ -118,29 +137,31 @@ | |||
123 | 118 | #settings["???"] = form.cleaned_data['languages'] #TODO not found in REST: | 137 | #settings["???"] = form.cleaned_data['languages'] #TODO not found in REST: |
124 | 119 | list_settings["advertised"] = form.cleaned_data['advertised'] | 138 | list_settings["advertised"] = form.cleaned_data['advertised'] |
125 | 120 | list_settings.save() | 139 | list_settings.save() |
126 | 140 | messages.success(_("List created")) | ||
127 | 121 | return redirect("list_summary",fqdn_listname=mailing_list.fqdn_listname) | 141 | return redirect("list_summary",fqdn_listname=mailing_list.fqdn_listname) |
128 | 122 | #TODO catch correct Error class: | 142 | #TODO catch correct Error class: |
129 | 123 | except HTTPError, e: | 143 | except HTTPError, e: |
133 | 124 | return render_to_response('mailmanweb/errors/generic.html', | 144 | messages.error(request,e) |
134 | 125 | {'error':e}, | 145 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) |
135 | 126 | context_instance=RequestContext(request)) | 146 | else: |
136 | 147 | messages.success(_("New List created")) | ||
137 | 127 | else: | 148 | else: |
138 | 128 | try: | 149 | try: |
139 | 129 | domains = Domain.objects.all() | 150 | domains = Domain.objects.all() |
142 | 130 | except MailmanApiError: | 151 | except MailmanApiError, e: |
143 | 131 | return utils.render_api_error(request) | 152 | messages.error(request,e) |
144 | 153 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
145 | 132 | choosable_domains = [("",_("Choose a Domain"))] | 154 | choosable_domains = [("",_("Choose a Domain"))] |
146 | 133 | for domain in domains: | 155 | for domain in domains: |
147 | 134 | choosable_domains.append((domain.mail_host,domain.mail_host)) | 156 | choosable_domains.append((domain.mail_host,domain.mail_host)) |
148 | 135 | form = ListNew(choosable_domains,initial={'list_owner': request.user.username}) | 157 | form = ListNew(choosable_domains,initial={'list_owner': request.user.username}) |
150 | 136 | return render_to_response(template, {'form': form, error:None}, | 158 | return render_to_response(template, {'form': form}, |
151 | 137 | context_instance=RequestContext(request)) | 159 | context_instance=RequestContext(request)) |
152 | 138 | 160 | ||
153 | 139 | def list_index(request, template = 'mailmanweb/lists/index.html'): | 161 | def list_index(request, template = 'mailmanweb/lists/index.html'): |
154 | 140 | """Show a table of all public mailing lists. | 162 | """Show a table of all public mailing lists. |
155 | 141 | """ | 163 | """ |
156 | 142 | lists = [] | 164 | lists = [] |
157 | 143 | error = None | ||
158 | 144 | domain = None | 165 | domain = None |
159 | 145 | only_public = True | 166 | only_public = True |
160 | 146 | if request.user.is_authenticated(): | 167 | if request.user.is_authenticated(): |
161 | @@ -148,13 +169,13 @@ | |||
162 | 148 | try: | 169 | try: |
163 | 149 | lists = List.objects.all(only_public=only_public) | 170 | lists = List.objects.all(only_public=only_public) |
164 | 150 | except MailmanApiError: | 171 | except MailmanApiError: |
166 | 151 | return utils.render_api_error(request) | 172 | messages.error(request,e) |
167 | 173 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
168 | 152 | if request.method == 'POST': | 174 | if request.method == 'POST': |
169 | 153 | return redirect("list_summary", fqdn_listname=request.POST["list"]) | 175 | return redirect("list_summary", fqdn_listname=request.POST["list"]) |
170 | 154 | else: | 176 | else: |
171 | 155 | return render_to_response(template, | 177 | return render_to_response(template, |
174 | 156 | {'error': error, | 178 | {'lists': lists,}, |
173 | 157 | 'lists': lists,}, | ||
175 | 158 | context_instance=RequestContext(request)) | 179 | context_instance=RequestContext(request)) |
176 | 159 | 180 | ||
177 | 160 | def list_metrics(request,fqdn_listname=None,option=None,template='mailmanweb/lists/metrics.html'): | 181 | def list_metrics(request,fqdn_listname=None,option=None,template='mailmanweb/lists/metrics.html'): |
178 | @@ -164,7 +185,6 @@ | |||
179 | 164 | information about the list such as the date of the last post and the | 185 | information about the list such as the date of the last post and the |
180 | 165 | time the last digest is sent. | 186 | time the last digest is sent. |
181 | 166 | """ | 187 | """ |
182 | 167 | error=None | ||
183 | 168 | user_is_subscribed = False | 188 | user_is_subscribed = False |
184 | 169 | if request.method == 'POST': | 189 | if request.method == 'POST': |
185 | 170 | return redirect("list_summary", fqdn_listname=request.POST["list"]) | 190 | return redirect("list_summary", fqdn_listname=request.POST["list"]) |
186 | @@ -177,7 +197,8 @@ | |||
187 | 177 | except: | 197 | except: |
188 | 178 | pass #init | 198 | pass #init |
189 | 179 | except MailmanApiError: | 199 | except MailmanApiError: |
191 | 180 | return render_api_error(request) | 200 | messages.error(request,e) |
192 | 201 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
193 | 181 | return render_to_response(template, | 202 | return render_to_response(template, |
194 | 182 | {'list':the_list, | 203 | {'list':the_list, |
195 | 183 | 'message': None, | 204 | 'message': None, |
196 | @@ -193,7 +214,8 @@ | |||
197 | 193 | try: | 214 | try: |
198 | 194 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 215 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
199 | 195 | except MailmanApiError: | 216 | except MailmanApiError: |
201 | 196 | return utils.render_api_error(request) | 217 | messages.error(request,e) |
202 | 218 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
203 | 197 | return render_to_response(template, | 219 | return render_to_response(template, |
204 | 198 | {'list': the_list, | 220 | {'list': the_list, |
205 | 199 | 'subscribe_form': ListSubscribe(), | 221 | 'subscribe_form': ListSubscribe(), |
206 | @@ -206,7 +228,8 @@ | |||
207 | 206 | try: | 228 | try: |
208 | 207 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 229 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
209 | 208 | except MailmanApiError: | 230 | except MailmanApiError: |
211 | 209 | return utils.render_api_error(request) | 231 | messages.error(request,e) |
212 | 232 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
213 | 210 | if request.method == 'POST': | 233 | if request.method == 'POST': |
214 | 211 | form = ListSubscribe(request.POST) | 234 | form = ListSubscribe(request.POST) |
215 | 212 | else: | 235 | else: |
216 | @@ -224,8 +247,6 @@ | |||
217 | 224 | user to fill in which are evaluated in this function. | 247 | user to fill in which are evaluated in this function. |
218 | 225 | """ | 248 | """ |
219 | 226 | #create Values for Template usage | 249 | #create Values for Template usage |
220 | 227 | message = None | ||
221 | 228 | error = None | ||
222 | 229 | form_subscribe = None | 250 | form_subscribe = None |
223 | 230 | form_unsubscribe = None | 251 | form_unsubscribe = None |
224 | 231 | if request.POST.get('fqdn_listname', ''): | 252 | if request.POST.get('fqdn_listname', ''): |
225 | @@ -233,9 +254,9 @@ | |||
226 | 233 | # connect REST and catch issues getting the list | 254 | # connect REST and catch issues getting the list |
227 | 234 | try: | 255 | try: |
228 | 235 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 256 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
230 | 236 | except AttributeError, e: | 257 | except MailmanApiError, e: |
231 | 258 | messages.error(request,"REST API not found / Offline") | ||
232 | 237 | return render_to_response('mailmanweb/errors/generic.html', | 259 | return render_to_response('mailmanweb/errors/generic.html', |
233 | 238 | {'error': "REST API not found / Offline"}, | ||
234 | 239 | context_instance=RequestContext(request)) | 260 | context_instance=RequestContext(request)) |
235 | 240 | #process submitted form | 261 | #process submitted form |
236 | 241 | if request.method == 'POST': | 262 | if request.method == 'POST': |
237 | @@ -254,8 +275,8 @@ | |||
238 | 254 | 'option':option, | 275 | 'option':option, |
239 | 255 | 'message':_("Subscribed ")+ email },context_instance=RequestContext(request)) | 276 | 'message':_("Subscribed ")+ email },context_instance=RequestContext(request)) |
240 | 256 | except HTTPError, e: | 277 | except HTTPError, e: |
243 | 257 | return render_to_response('mailmanweb/errors/generic.html', | 278 | messages.error(request,e) |
244 | 258 | {'error':e}, context_instance=RequestContext(request)) | 279 | return render_to_response('mailmanweb/errors/generic.html', context_instance=RequestContext(request)) |
245 | 259 | else: #invalid subscribe form | 280 | else: #invalid subscribe form |
246 | 260 | form_subscribe = form | 281 | form_subscribe = form |
247 | 261 | form_unsubscribe = ListUnsubscribe(initial = {'fqdn_listname': fqdn_listname, 'name' : 'unsubscribe'}) | 282 | form_unsubscribe = ListUnsubscribe(initial = {'fqdn_listname': fqdn_listname, 'name' : 'unsubscribe'}) |
248 | @@ -269,8 +290,8 @@ | |||
249 | 269 | return render_to_response('mailmanweb/lists/summary.html', | 290 | return render_to_response('mailmanweb/lists/summary.html', |
250 | 270 | {'list': the_list, 'message':_("Unsubscribed ")+ email },context_instance=RequestContext(request)) | 291 | {'list': the_list, 'message':_("Unsubscribed ")+ email },context_instance=RequestContext(request)) |
251 | 271 | except ValueError, e: | 292 | except ValueError, e: |
254 | 272 | return render_to_response('mailmanweb/errors/generic.html', | 293 | messages.error(request,e) |
255 | 273 | {'error':e}, context_instance=RequestContext(request)) | 294 | return render_to_response('mailmanweb/errors/generic.html', context_instance=RequestContext(request)) |
256 | 274 | else:#invalid unsubscribe form | 295 | else:#invalid unsubscribe form |
257 | 275 | form_subscribe = ListSubscribe(initial = {'fqdn_listname': fqdn_listname, | 296 | form_subscribe = ListSubscribe(initial = {'fqdn_listname': fqdn_listname, |
258 | 276 | 'option':option, | 297 | 'option':option, |
259 | @@ -288,8 +309,6 @@ | |||
260 | 288 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname)#TODO | 309 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname)#TODO |
261 | 289 | return render_to_response(template, {'form_subscribe': form_subscribe, | 310 | return render_to_response(template, {'form_subscribe': form_subscribe, |
262 | 290 | 'form_unsubscribe': form_unsubscribe, | 311 | 'form_unsubscribe': form_unsubscribe, |
263 | 291 | 'message':message, | ||
264 | 292 | 'error':error, | ||
265 | 293 | 'list': the_list, | 312 | 'list': the_list, |
266 | 294 | } | 313 | } |
267 | 295 | ,context_instance=RequestContext(request)) | 314 | ,context_instance=RequestContext(request)) |
268 | @@ -301,7 +320,8 @@ | |||
269 | 301 | try: | 320 | try: |
270 | 302 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 321 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
271 | 303 | except MailmanApiError: | 322 | except MailmanApiError: |
273 | 304 | return utils.render_api_error(request) | 323 | messages.error(request,e) |
274 | 324 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
275 | 305 | if request.method == 'POST': | 325 | if request.method == 'POST': |
276 | 306 | the_list.delete() | 326 | the_list.delete() |
277 | 307 | # let the user return to the list index page | 327 | # let the user return to the list index page |
278 | @@ -328,7 +348,6 @@ | |||
279 | 328 | to show only parts of the settings | 348 | to show only parts of the settings |
280 | 329 | <param> is optional / is used to differ in between section and option might result in using //option | 349 | <param> is optional / is used to differ in between section and option might result in using //option |
281 | 330 | """ | 350 | """ |
282 | 331 | message = "" | ||
283 | 332 | logger.debug(visible_section) | 351 | logger.debug(visible_section) |
284 | 333 | if visible_section == None: | 352 | if visible_section == None: |
285 | 334 | visible_section = 'List Identity' | 353 | visible_section = 'List Identity' |
286 | @@ -336,14 +355,15 @@ | |||
287 | 336 | try: | 355 | try: |
288 | 337 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 356 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
289 | 338 | except MailmanApiError: | 357 | except MailmanApiError: |
291 | 339 | return utils.render_api_error(request) | 358 | messages.error(request,e) |
292 | 359 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
293 | 340 | #collect all Form sections for the links: | 360 | #collect all Form sections for the links: |
294 | 341 | temp = ListSettings('','') | 361 | temp = ListSettings('','') |
295 | 342 | for section in temp.layout: | 362 | for section in temp.layout: |
296 | 343 | try: | 363 | try: |
297 | 344 | form_sections.append((section[0],temp.section_descriptions[section[0]])) | 364 | form_sections.append((section[0],temp.section_descriptions[section[0]])) |
298 | 345 | except KeyError, e: | 365 | except KeyError, e: |
300 | 346 | error=e | 366 | messages.error(e) |
301 | 347 | del temp | 367 | del temp |
302 | 348 | #Save a Form Processed by POST | 368 | #Save a Form Processed by POST |
303 | 349 | if request.method == 'POST': | 369 | if request.method == 'POST': |
304 | @@ -354,9 +374,9 @@ | |||
305 | 354 | for key in form.fields.keys(): | 374 | for key in form.fields.keys(): |
306 | 355 | list_settings[key] = form.cleaned_data[key] | 375 | list_settings[key] = form.cleaned_data[key] |
307 | 356 | list_settings.save() | 376 | list_settings.save() |
309 | 357 | message = _("The list has been updated.") | 377 | messages.success(_("The list has been updated.")) |
310 | 358 | else: | 378 | else: |
312 | 359 | message = _("Validation Error - The list has not been updated.") | 379 | messages.success(_("Validation Error - The list has not been updated.")) |
313 | 360 | 380 | ||
314 | 361 | else: | 381 | else: |
315 | 362 | #Provide a form with existing values | 382 | #Provide a form with existing values |
316 | @@ -372,7 +392,6 @@ | |||
317 | 372 | form.truncate() | 392 | form.truncate() |
318 | 373 | return render_to_response(template, {'form': form, | 393 | return render_to_response(template, {'form': form, |
319 | 374 | 'form_sections': form_sections, | 394 | 'form_sections': form_sections, |
320 | 375 | 'message': message, | ||
321 | 376 | 'list': the_list, | 395 | 'list': the_list, |
322 | 377 | 'visible_option':visible_option, | 396 | 'visible_option':visible_option, |
323 | 378 | 'visible_section':visible_section, | 397 | 'visible_section':visible_section, |
324 | @@ -387,11 +406,11 @@ | |||
325 | 387 | This functions is part of the settings for a list and requires the | 406 | This functions is part of the settings for a list and requires the |
326 | 388 | user to be logged in to perform the action. | 407 | user to be logged in to perform the action. |
327 | 389 | """ | 408 | """ |
328 | 390 | message = "" | ||
329 | 391 | try: | 409 | try: |
330 | 392 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) | 410 | the_list = List.objects.get_or_404(fqdn_listname=fqdn_listname) |
331 | 393 | except MailmanApiError: | 411 | except MailmanApiError: |
333 | 394 | return utils.render_api_error(request) | 412 | messages.error(request,e) |
334 | 413 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) | ||
335 | 395 | if request.method == 'POST': | 414 | if request.method == 'POST': |
336 | 396 | form = ListMassSubscription(request.POST) | 415 | form = ListMassSubscription(request.POST) |
337 | 397 | if form.is_valid(): | 416 | if form.is_valid(): |
338 | @@ -405,16 +424,15 @@ | |||
339 | 405 | if len(parts) == 2 and '.' in parts[1]: #TODO - move check to clean method of the form - see example in django docs | 424 | if len(parts) == 2 and '.' in parts[1]: #TODO - move check to clean method of the form - see example in django docs |
340 | 406 | try: | 425 | try: |
341 | 407 | the_list.subscribe(address=email, real_name="") | 426 | the_list.subscribe(address=email, real_name="") |
343 | 408 | message = "The mass subscription was successful." | 427 | messages.success(_("The mass subscription was successful.")) |
344 | 409 | except Exception, e: #TODO find right exception and catch only this one | 428 | except Exception, e: #TODO find right exception and catch only this one |
348 | 410 | return render_to_response('mailmanweb/errors/generic.html', | 429 | messages.error(request,str(e)) |
349 | 411 | {'error': str(e)}) | 430 | return render_to_response('mailmanweb/errors/generic.html', ) |
347 | 412 | |||
350 | 413 | else: | 431 | else: |
351 | 414 | # At least one email address wasn't valid so | 432 | # At least one email address wasn't valid so |
352 | 415 | # overwrite the success message and ask them to | 433 | # overwrite the success message and ask them to |
353 | 416 | # try again. | 434 | # try again. |
355 | 417 | message = "Please enter valid email addresses." | 435 | messages.error(_("Please enter valid email addresses.")) |
356 | 418 | except Exception, e: | 436 | except Exception, e: |
357 | 419 | return HttpResponse(e) | 437 | return HttpResponse(e) |
358 | 420 | else: | 438 | else: |
359 | @@ -422,7 +440,6 @@ | |||
360 | 422 | # mass subscribe users. | 440 | # mass subscribe users. |
361 | 423 | form = ListMassSubscription() | 441 | form = ListMassSubscription() |
362 | 424 | return render_to_response(template, {'form': form, | 442 | return render_to_response(template, {'form': form, |
363 | 425 | 'message': message, | ||
364 | 426 | 'list': the_list} | 443 | 'list': the_list} |
365 | 427 | ,context_instance=RequestContext(request)) | 444 | ,context_instance=RequestContext(request)) |
366 | 428 | 445 | ||
367 | @@ -438,7 +455,6 @@ | |||
368 | 438 | change to the correct calls here | 455 | change to the correct calls here |
369 | 439 | """ | 456 | """ |
370 | 440 | member = request.user.username | 457 | member = request.user.username |
371 | 441 | message = '' | ||
372 | 442 | form = None | 458 | form = None |
373 | 443 | the_list=None | 459 | the_list=None |
374 | 444 | membership_lists = [] | 460 | membership_lists = [] |
375 | @@ -450,8 +466,14 @@ | |||
376 | 450 | the_list = List.objects.get(fqdn_listname=fqdn_listname) | 466 | the_list = List.objects.get(fqdn_listname=fqdn_listname) |
377 | 451 | user_object = the_list.get_member(member) | 467 | user_object = the_list.get_member(member) |
378 | 452 | else: | 468 | else: |
379 | 469 | <<<<<<< TREE | ||
380 | 453 | message = ("Using a workaround to replace missing Client functionality → LP:820827") | 470 | message = ("Using a workaround to replace missing Client functionality → LP:820827") |
381 | 454 | for mlist in List.objects.all(): | 471 | for mlist in List.objects.all(): |
382 | 472 | ======= | ||
383 | 473 | messages.debug("Using a workaround to replace missing Client functionality → LP:820827") #Todo - no translation neededf | ||
384 | 474 | #### BEGIN workaround | ||
385 | 475 | for mlist in Lists.objects.all(): | ||
386 | 476 | >>>>>>> MERGE-SOURCE | ||
387 | 455 | try: | 477 | try: |
388 | 456 | mlist.get_member(member) | 478 | mlist.get_member(member) |
389 | 457 | membership_lists.append(mlist) | 479 | membership_lists.append(mlist) |
390 | @@ -462,17 +484,16 @@ | |||
391 | 462 | # tuples of length 2 | 484 | # tuples of length 2 |
392 | 463 | raise Exception("WORK in PROGRRESS needs REST Auth Middleware! - TODO") | 485 | raise Exception("WORK in PROGRRESS needs REST Auth Middleware! - TODO") |
393 | 464 | address_choices = [[addr, addr] for addr in user_object.address] | 486 | address_choices = [[addr, addr] for addr in user_object.address] |
398 | 465 | except AttributeError, e: | 487 | except MailmanApiError, e: |
399 | 466 | return render_to_response('mailmanweb/errors/generic.html', | 488 | messages.error(request,str(e)+"REST API not found / Offline") |
400 | 467 | {'error': str(e)+"REST API not found / Offline"}, | 489 | return render_to_response('mailmanweb/errors/generic.html',context_instance=RequestContext(request)) |
397 | 468 | context_instance=RequestContext(request)) | ||
401 | 469 | except ValueError, e: | 490 | except ValueError, e: |
402 | 491 | messages.error(request,e) | ||
403 | 470 | return render_to_response('mailmanweb/errors/generic.html', | 492 | return render_to_response('mailmanweb/errors/generic.html', |
404 | 471 | {'error': e}, | ||
405 | 472 | context_instance=RequestContext(request)) | 493 | context_instance=RequestContext(request)) |
406 | 473 | except HTTPError,e : | 494 | except HTTPError,e : |
407 | 495 | messages.error(request,_("List ")+fqdn_listname+_(" does not exist")) | ||
408 | 474 | return render_to_response('mailmanweb/errors/generic.html', | 496 | return render_to_response('mailmanweb/errors/generic.html', |
409 | 475 | {'error': _("List ")+fqdn_listname+_(" does not exist")}, | ||
410 | 476 | context_instance=RequestContext(request)) | 497 | context_instance=RequestContext(request)) |
411 | 477 | #----------------------------------------------------------------- | 498 | #----------------------------------------------------------------- |
412 | 478 | if request.method == 'POST': | 499 | if request.method == 'POST': |
413 | @@ -484,7 +505,7 @@ | |||
414 | 484 | if form.is_valid(): | 505 | if form.is_valid(): |
415 | 485 | member_object = c.get_member(member, request.GET["list"]) | 506 | member_object = c.get_member(member, request.GET["list"]) |
416 | 486 | member_object.update(request.POST) | 507 | member_object.update(request.POST) |
418 | 487 | message = "The membership settings have been updated." | 508 | messages.success(_("The membership settings have been updated.")) |
419 | 488 | else: | 509 | else: |
420 | 489 | # the post request came from the user tab | 510 | # the post request came from the user tab |
421 | 490 | # the 'address' field need choices as a tuple of length 2 | 511 | # the 'address' field need choices as a tuple of length 2 |
422 | @@ -498,7 +519,7 @@ | |||
423 | 498 | # not just the address_choices (add mock data to _User | 519 | # not just the address_choices (add mock data to _User |
424 | 499 | # class and make the call with 'user_object.info') | 520 | # class and make the call with 'user_object.info') |
425 | 500 | form = UserSettings(address_choices) | 521 | form = UserSettings(address_choices) |
427 | 501 | message = "The user settings have been updated." | 522 | messages.success(_("The user settings have been updated.")) |
428 | 502 | 523 | ||
429 | 503 | else: | 524 | else: |
430 | 504 | if tab == "membership" and fqdn_listname : | 525 | if tab == "membership" and fqdn_listname : |
431 | @@ -533,7 +554,6 @@ | |||
432 | 533 | 'tab': tab, | 554 | 'tab': tab, |
433 | 534 | 'list': the_list, | 555 | 'list': the_list, |
434 | 535 | 'membership_lists': membership_lists, | 556 | 'membership_lists': membership_lists, |
435 | 536 | 'message': message, | ||
436 | 537 | 'member': member} | 557 | 'member': member} |
437 | 538 | ,context_instance=RequestContext(request)) | 558 | ,context_instance=RequestContext(request)) |
438 | 539 | 559 |
Thank you! I had to add the request param to the messages.success call in line 134. Other than that everything's fine. Added to the trunk...