Browse Source

Newsletters refractored

Ralfp 12 years ago
parent
commit
de1c5204c1

+ 12 - 11
misago/admin/layout/users.py

@@ -3,7 +3,8 @@ from django.utils.translation import ugettext_lazy as _
 from misago.admin import AdminAction
 from misago.acl.models import Role
 from misago.banning.models import Ban
-from misago.users.models import User, Rank, Newsletter, Pruning
+from misago.newsletters.models import Newsletter
+from misago.users.models import User, Rank, Pruning
 
 ADMIN_ACTIONS=(
    AdminAction(
@@ -167,23 +168,23 @@ ADMIN_ACTIONS=(
                          'id': 'list',
                          'name': _("Browse Newsletters"),
                          'help': _("Browse all existing Newsletters"),
-                         'route': 'admin_users_newsletters'
+                         'route': 'admin_newsletters'
                          },
                         {
                          'id': 'new',
                          'name': _("New Newsletter"),
                          'help': _("Create new Newsletter"),
-                         'route': 'admin_users_newsletters_new'
+                         'route': 'admin_newsletters_new'
                          },
                         ],
-               route='admin_users_newsletters',
-               urlpatterns=patterns('misago.users.admin.newsletters.views',
-                        url(r'^$', 'List', name='admin_users_newsletters'),
-                        url(r'^(?P<page>\d+)/$', 'List', name='admin_users_newsletters'),
-                        url(r'^new/$', 'New', name='admin_users_newsletters_new'),
-                        url(r'^send/(?P<target>\d+)/(?P<token>[a-zA-Z0-9]+)/$', 'send', name='admin_users_newsletters_send'),
-                        url(r'^edit/(?P<target>\d+)/$', 'Edit', name='admin_users_newsletters_edit'),
-                        url(r'^delete/(?P<target>\d+)/$', 'Delete', name='admin_users_newsletters_delete'),
+               route='admin_newsletters',
+               urlpatterns=patterns('misago.newsletters.views',
+                        url(r'^$', 'List', name='admin_newsletters'),
+                        url(r'^(?P<page>\d+)/$', 'List', name='admin_newsletters'),
+                        url(r'^new/$', 'New', name='admin_newsletters_new'),
+                        url(r'^send/(?P<target>\d+)/(?P<token>[a-zA-Z0-9]+)/$', 'send', name='admin_newsletters_send'),
+                        url(r'^edit/(?P<target>\d+)/$', 'Edit', name='admin_newsletters_edit'),
+                        url(r'^delete/(?P<target>\d+)/$', 'Delete', name='admin_newsletters_delete'),
                     ),
                ),
 )

+ 0 - 0
misago/users/admin/newsletters/__init__.py → misago/newsletters/__init__.py


+ 0 - 0
misago/users/admin/newsletters/forms.py → misago/newsletters/forms.py


+ 33 - 0
misago/newsletters/models.py

@@ -0,0 +1,33 @@
+from django.db import models
+from misago.security import get_random_string
+
+class Newsletter(models.Model):
+    name = models.CharField(max_length=255)
+    token = models.CharField(max_length=32)
+    step_size = models.PositiveIntegerField(default=0)
+    progress = models.PositiveIntegerField(default=0)
+    content_html = models.TextField(null=True,blank=True)
+    content_plain = models.TextField(null=True,blank=True)
+    ignore_subscriptions = models.BooleanField(default=False)
+    ranks = models.ManyToManyField('users.Rank')
+    
+    def generate_token(self):
+        self.token = get_random_string(32)
+    
+    def parse_name(self, tokens):
+        name = self.name
+        for key in tokens:
+            name = name.replace(key, tokens[key])
+        return name
+    
+    def parse_html(self, tokens):
+        content_html = self.content_html
+        for key in tokens:
+            content_html = content_html.replace(key, tokens[key])
+        return content_html
+    
+    def parse_plain(self, tokens):
+        content_plain = self.content_plain
+        for key in tokens:
+            content_plain = content_plain.replace(key, tokens[key])
+        return content_plain

+ 19 - 21
misago/users/admin/newsletters/views.py → misago/newsletters/views.py

@@ -1,20 +1,18 @@
-import re
 from django.conf import settings
 from django.core.urlresolvers import reverse as django_reverse
-from django import forms
 from django.db.models import Q
 from django.shortcuts import redirect
 from django.template import RequestContext
 from django.utils.translation import ugettext as _
 from misago.admin import site
 from misago.admin.widgets import *
-from misago.forms import Form
-from misago.users.admin.newsletters.forms import NewsletterForm, SearchNewslettersForm
-from misago.users.models import User, Newsletter
+from misago.newsletters.forms import NewsletterForm, SearchNewslettersForm
+from misago.newsletters.models import Newsletter
+from misago.users.models import User
 
 def reverse(route, target=None):
     if target:
-        if route == 'admin_users_newsletters_send':
+        if route == 'admin_newsletters_send':
           return django_reverse(route, kwargs={'target': target.pk, 'token': target.token})
         return django_reverse(route, kwargs={'target': target.pk})
     return django_reverse(route)
@@ -51,29 +49,29 @@ class List(ListWidget):
     
     def get_item_actions(self, request, item):
         return (
-                self.action('envelope', _("Send Newsletter"), reverse('admin_users_newsletters_send', item)),
-                self.action('pencil', _("Edit Newsletter"), reverse('admin_users_newsletters_edit', item)),
-                self.action('remove', _("Delete Newsletter"), reverse('admin_users_newsletters_delete', item), post=True, prompt=_("Are you sure you want to delete this newsletter?")),
+                self.action('envelope', _("Send Newsletter"), reverse('admin_newsletters_send', item)),
+                self.action('pencil', _("Edit Newsletter"), reverse('admin_newsletters_edit', item)),
+                self.action('remove', _("Delete Newsletter"), reverse('admin_newsletters_delete', item), post=True, prompt=_("Are you sure you want to delete this newsletter?")),
                 )
 
     def action_delete(self, request, items, checked):
         Newsletter.objects.filter(id__in=checked).delete()
-        return Message(_('Selected newsletters have been deleted successfully.'), 'success'), reverse('admin_users_newsletters')
+        return Message(_('Selected newsletters have been deleted successfully.'), 'success'), reverse('admin_newsletters')
 
 
 class New(FormWidget):
     admin = site.get_action('newsletters')
     id = 'new'
-    fallback = 'admin_users_newsletters' 
+    fallback = 'admin_newsletters' 
     form = NewsletterForm
     submit_button = _("Save Newsletter")
     tabbed = True
         
     def get_new_url(self, request, model):
-        return reverse('admin_users_newsletters')
+        return reverse('admin_newsletters')
     
     def get_edit_url(self, request, model):
-        return reverse('admin_users_newsletters_edit', model)
+        return reverse('admin_newsletters_edit', model)
     
     def submit_form(self, request, form, target):
         new_newsletter = Newsletter(
@@ -97,7 +95,7 @@ class Edit(FormWidget):
     admin = site.get_action('newsletters')
     id = 'edit'
     name = _("Edit Newsletter")
-    fallback = 'admin_users_newsletters'
+    fallback = 'admin_newsletters'
     form = NewsletterForm
     target_name = 'name'
     notfound_message = _('Requested Newsletter could not be found.')
@@ -105,7 +103,7 @@ class Edit(FormWidget):
     tabbed = True
     
     def get_url(self, request, model):
-        return reverse('admin_users_newsletters_edit', model)
+        return reverse('admin_newsletters_edit', model)
     
     def get_edit_url(self, request, model):
         return self.get_url(request, model)
@@ -139,7 +137,7 @@ class Edit(FormWidget):
 class Delete(ButtonWidget):
     admin = site.get_action('newsletters')
     id = 'delete'
-    fallback = 'admin_users_newsletters'
+    fallback = 'admin_newsletters'
     notfound_message = _('Requested newsletter could not be found.')
     
     def action(self, request, target):
@@ -162,7 +160,7 @@ def send(request, target, token):
         recipients_total = recipients_total.count()
         if recipients_total < 1:
             request.messages.set_flash(Message(_('No recipients for newsletter "%(newsletter)s" could be found.') % {'newsletter': newsletter.name}), 'error', 'newsletters')
-            return redirect(reverse('admin_users_newsletters'))
+            return redirect(reverse('admin_newsletters'))
        
         for user in recipients.all()[newsletter.progress:(newsletter.progress + newsletter.step_size)]:
             tokens = {
@@ -186,7 +184,7 @@ def send(request, target, token):
             newsletter.progress = 0
             newsletter.save(force_update=True)
             request.messages.set_flash(Message(_('Newsletter "%(newsletter)s" has been sent.') % {'newsletter': newsletter.name}), 'success', 'newsletters')
-            return redirect(reverse('admin_users_newsletters'))
+            return redirect(reverse('admin_newsletters'))
         
         # Render Progress
         response = request.theme.render_to_response('processing.html', {
@@ -194,10 +192,10 @@ def send(request, target, token):
                 'target_name': newsletter.name,
                 'message': _('Sent to %(progress)s from %(total)s users') % {'progress': newsletter.progress, 'total': recipients_total},
                 'progress': newsletter.progress * 100 / recipients_total,
-                'cancel_url': reverse('admin_users_newsletters'),
+                'cancel_url': reverse('admin_newsletters'),
             }, context_instance=RequestContext(request));
-        response['refresh'] = '2;url=%s' % reverse('admin_users_newsletters_send', newsletter)
+        response['refresh'] = '2;url=%s' % reverse('admin_newsletters_send', newsletter)
         return response
     except Newsletter.DoesNotExist:
         request.messages.set_flash(Message(_('Requested Newsletter could not be found.')), 'error', 'newsletters')
-        return redirect(reverse('admin_users_newsletters'))
+        return redirect(reverse('admin_newsletters'))

+ 1 - 0
misago/settings_base.py

@@ -105,6 +105,7 @@ INSTALLED_APPS = (
     'misago.cookie_jar', # Cookies helper
     'misago.forums', # Forums, threads and posts
     'misago.messages', # Messages and Flashes
+    'misago.newsletters', # Send newsletters to members from Admin
     'misago.stats', # Admin statistics generator
     'misago.security', # Security: CSRF, Firewall, etc ect
     'misago.sessions', # Sessions

+ 0 - 35
misago/users/models.py

@@ -519,41 +519,6 @@ class Rank(models.Model):
                 print 'Error updating users ranking: %s' % e
             transaction.commit_unless_managed()
         return True
-    
-
-class Newsletter(models.Model):
-    """
-    Newsletter
-    """
-    name = models.CharField(max_length=255)
-    token = models.CharField(max_length=32)
-    step_size = models.PositiveIntegerField(default=0)
-    progress = models.PositiveIntegerField(default=0)
-    content_html = models.TextField(null=True,blank=True)
-    content_plain = models.TextField(null=True,blank=True)
-    ignore_subscriptions = models.BooleanField(default=False)
-    ranks = models.ManyToManyField(Rank)
-    
-    def generate_token(self):
-        self.token = get_random_string(32)
-    
-    def parse_name(self, tokens):
-        name = self.name
-        for key in tokens:
-            name = name.replace(key, tokens[key])
-        return name
-    
-    def parse_html(self, tokens):
-        content_html = self.content_html
-        for key in tokens:
-            content_html = content_html.replace(key, tokens[key])
-        return content_html
-    
-    def parse_plain(self, tokens):
-        content_plain = self.content_plain
-        for key in tokens:
-            content_plain = content_plain.replace(key, tokens[key])
-        return content_plain
 
 
 class Pruning(models.Model):

+ 0 - 0
templates/admin/users/newsletters/list.html → templates/admin/newsletters/list.html