Joanna Skrzeszewska has proposed merging lp:~jskrzeszewska/postorius/postorius
into lp:postorius.
Requested reviews:
Barry Warsaw (barry)
For more details, see:
https://code.launchpad.net/~jskrzeszewska/postorius/postorius/+merge/178413
Added page for rss settings.
--
https://code.launchpad.net/~jskrzeszewska/postorius/postorius/+merge/178413
Your team Mailman Coders is subscribed to branch lp:postorius.
=== modified file 'src/postorius/forms.py'
--- src/postorius/forms.py 2013-03-21 18:43:28 +0000
+++ src/postorius/forms.py 2013-08-03 05:48:27 +0000
@@ -183,6 +183,23 @@
'required': _('Please enter an email address.'),
'invalid': _('Please enter a valid email address.')})
+class ListRssFeed(FieldsetForm):
+
+ def __init__(self, result):
+ super(ListRssFeed, self).__init__()
+ self.enabled = result[u'enabled']
+ self.sizeLimit = result[u'sizeLimit']
+ self.fields['switched'] = forms.TypedChoiceField(
+ coerce=lambda x: x == 'True',
+ choices=((1, _('On')), (0, _('Off'))),
+ widget=forms.RadioSelect,
+ label=_('Switch a feed:'),
+ initial=self.enabled
+ )
+ self.fields['feed_entries'] = forms.DecimalField(
+ label=_('Number of entries for feed:'),
+ initial=self.sizeLimit
+ )
class ListSettings(FieldsetForm):
"""Form fields dealing with the list settings.
=== modified file 'src/postorius/models.py'
--- src/postorius/models.py 2013-05-31 02:21:38 +0000
+++ src/postorius/models.py 2013-08-03 05:48:27 +0000
@@ -75,6 +75,20 @@
except MailmanConnectionError, e:
raise MailmanApiError(e)
+ def set(self, **kwargs):
+ try:
+ method = getattr(self.client, 'set_' + self.resource_name)
+ return method(**kwargs)
+ except AttributeError, e:
+ raise MailmanApiError(e)
+ except HTTPError, e:
+ if e.code == 404:
+ raise Mailman404Error
+ else:
+ raise
+ except MailmanConnectionError, e:
+ raise MailmanApiError(e)
+
def get_or_404(self, **kwargs):
"""Similar to `self.get` but raises standard Django 404 error.
"""
=== added file 'src/postorius/templates/postorius/lists/rss_xml_template.html'
--- src/postorius/templates/postorius/lists/rss_xml_template.html 1970-01-01 00:00:00 +0000
+++ src/postorius/templates/postorius/lists/rss_xml_template.html 2013-08-03 05:48:27 +0000
@@ -0,0 +1,1 @@
+{{ xml_file_content|safe }}
=== added file 'src/postorius/templates/postorius/lists/rssfeed.html'
--- src/postorius/templates/postorius/lists/rssfeed.html 1970-01-01 00:00:00 +0000
+++ src/postorius/templates/postorius/lists/rssfeed.html 2013-08-03 05:48:27 +0000
@@ -0,0 +1,23 @@
+{% extends extend_template %}
+{% load url from future %}
+{% load i18n %}
+{% load nav_helpers %}
+
+{% block main %}
+ {% list_nav 'list_rssfeed' 'RSS Feed' %}
+ <table class="well">
+ <form action="{% url 'list_rssfeed' list.fqdn_listname %}" method="post" class="well"> {% csrf_token %}
+ {% if result.enabled %}
+ <tr><td>RSS feed link: <br /></td><td><a href="./getfeed">RSS link</a></td></tr>
+ {% endif %}
+ {% for field in form %}
+ <tr><td>
+ {{ field.label_tag }} <br />
+ </td><td>{{ field }}</td></tr>
+ {% endfor %}
+ <tr><td colspan="2">
+ <button class="btn btn-primary" type="submit">{%trans "Save changes" %}</button>
+ </td></tr>
+ </form>
+ </table>
+{% endblock main %}
=== modified file 'src/postorius/templates/postorius/menu/list_nav.html'
--- src/postorius/templates/postorius/menu/list_nav.html 2012-12-15 21:19:58 +0000
+++ src/postorius/templates/postorius/menu/list_nav.html 2013-08-03 05:48:27 +0000
@@ -22,6 +22,7 @@
{% if user.is_superuser or user.is_list_owner %}
<li class="mm_nav_item"><a class="{% nav_active_class current 'list_delete' %}" href="{% url 'list_delete' list.fqdn_listname %}">{% trans "Delete List" %}</a></li>
{% endif %}
+ <li class="mm_nav_item"><a class="{% nav_active_class current 'list_rssfeed' %}" href="{% url 'list_rssfeed' list.fqdn_listname %}">{% trans "RSS Feed" %}</a></li>
</ul>
{% endif %}
</div>
=== modified file 'src/postorius/urls.py'
--- src/postorius/urls.py 2013-07-05 11:05:45 +0000
+++ src/postorius/urls.py 2013-08-03 05:48:27 +0000
@@ -80,6 +80,46 @@
# /lists/
url(r'^lists/$', 'list_index', name='list_index'),
url(r'^lists/new/$', 'list_new', name='list_new'),
+<<<<<<< TREE
+=======
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/members/(?P<page>\d+)/$',
+ ListMembersView.as_view(), name='list_members_paged'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/members/$',
+ ListMembersView.as_view(), name='list_members'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/metrics$',
+ ListMetricsView.as_view(), name='list_metrics'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/$',
+ ListSummaryView.as_view(), name='list_summary'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/subscribe$',
+ ListSubsribeView.as_view(), name='list_subscribe'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/rssfeed$',
+ ListFeedView.as_view(), name='list_rssfeed'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/getfeed$',
+ ListFeedXmlView.as_view(), name='list_getfeed'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/unsubscribe/(?P<email>[^/]+)$',
+ ListUnsubscribeView.as_view(), name='list_unsubscribe'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/subscriptions$',
+ 'list_subscriptions', name='list_subscriptions'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/mass_subscribe/$',
+ ListMassSubsribeView.as_view(), name='mass_subscribe'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/delete$',
+ 'list_delete', name='list_delete'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/held_messages/(?P<msg_id>[^/]+)/'
+ 'accept$', 'accept_held_message', name='accept_held_message'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/held_messages/(?P<msg_id>[^/]+)/'
+ 'discard$', 'discard_held_message', name='discard_held_message'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/held_messages/(?P<msg_id>[^/]+)/'
+ 'defer$', 'defer_held_message', name='defer_held_message'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/held_messages/(?P<msg_id>[^/]+)/'
+ 'reject$', 'reject_held_message', name='reject_held_message'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/held_messages$',
+ 'list_held_messages', name='list_held_messages'),
+ url(r'^user_settings/$', 'user_settings', kwargs={"tab": "user"},
+ name='user_settings'),
+ url(r'^lists/(?P<fqdn_listname>[^/]+)/settings/(?P<visible_section>[^/]+)?'
+ '(?:/(?P<visible_option>.*))?$', 'list_settings',
+ name='list_settings'),
+>>>>>>> MERGE-SOURCE
url(r'^more_info/(?P<formid>[^/]+)/(?P<helpid>[^/]+)$', 'more_info_tab', name='more_info_tab'),
url(r'^lists/(?P<fqdn_listname>[^/]+)/', include(per_list_urlpatterns)),
# /users/
=== modified file 'src/postorius/views/list.py'
--- src/postorius/views/list.py 2013-07-14 20:39:16 +0000
+++ src/postorius/views/list.py 2013-08-03 05:48:27 +0000
@@ -16,6 +16,7 @@
# You should have received a copy of the GNU General Public License along with
# Postorius. If not, see <http://www.gnu.org/licenses/>.
+import os
from django.contrib import messages
from django.contrib.auth.decorators import (login_required,
@@ -29,7 +30,7 @@
from postorius import utils
from postorius.models import (Domain, List, MailmanUser,
- MailmanApiError)
+ MailmanApiError, MailmanRestManager)
from postorius.forms import *
from postorius.auth.decorators import *
from postorius.views.generic import MailingListView
@@ -116,6 +117,43 @@
'subscribe_form': ListSubscribe(initial={'email': user_email})},
context_instance=RequestContext(request))
+class ListFeedView(MailingListView):
+
+ def get(self, request, fqdn_listname, updated=False):
+ manager = MailmanRestManager('feed', 'feeds')
+ result = manager.get(fqdn_listname=fqdn_listname)
+ form = ListRssFeed(result)
+ return render_to_response(
+ 'postorius/lists/rssfeed.html',
+ {'list': self.mailing_list,
+ 'result': result,
+ 'updated': updated,
+ 'form': form},
+ context_instance=RequestContext(request))
+
+ def post(self, request, fqdn_listname):
+ manager = MailmanRestManager('feed', 'feeds')
+ is_enabled = request.POST.get('switched')
+ size_limit = request.POST.get('feed_entries')
+ result = manager.get(fqdn_listname=fqdn_listname)
+ form = ListRssFeed(result)
+ if form.is_valid:
+ messages.success(request, 'The RSS feed settings have been updated')
+ manager.set(fqdn_listname=fqdn_listname, is_enabled=is_enabled, size_limit=size_limit)
+ return self.get(request, fqdn_listname, True)
+
+class ListFeedXmlView(MailingListView):
+
+ def get(self, request, fqdn_listname):
+ dirPath = "/root/mailman/var/feeds"
+ fileName = fqdn_listname + ".xml"
+ filePath = os.path.abspath(os.path.join(dirPath, fileName))
+ with open(filePath, "r") as f:
+ xml_file_content = f.read()
+ return render_to_response(
+ 'postorius/lists/rss_xml_template.html',
+ {'xml_file_content': xml_file_content},
+ context_instance=RequestContext(request))
class ListSubsribeView(MailingListView):
"""Subscribe a mailing list."""
_______________________________________________
Mailman-coders mailing list
[email protected]
http://mail.python.org/mailman/listinfo/mailman-coders