Browse Source

#419: Renamed prefixes to labels

Rafał Pitoń 11 years ago
parent
commit
212700ad98

+ 1 - 1
misago/conf/defaults.py

@@ -172,7 +172,7 @@ MISAGO_MARKUP_EXTENSIONS = ()
 
 MISAGO_POSTING_MIDDLEWARES = (
     'misago.threads.posting.reply.ReplyFormMiddleware',
-    'misago.threads.posting.threadprefix.ThreadPrefixFormMiddleware',
+    'misago.threads.posting.threadlabel.ThreadLabelFormMiddleware',
     'misago.threads.posting.threadweight.ThreadWeightFormMiddleware',
     'misago.threads.posting.threadclose.ThreadCloseFormMiddleware',
     'misago.threads.posting.recordedit.RecordEditMiddleware',

+ 3 - 0
misago/forums/forms.py

@@ -45,6 +45,9 @@ class ForumListLazyQueryset(object):
     def exclude(self, *args, **kwargs):
         return self.all().exclude(*args, **kwargs)
 
+    def none(self):
+        return Forum.objects.none()
+
     def __len__(self):
         return len(self.all())
 

+ 3 - 3
misago/templates/misago/admin/prefixes/form.html → misago/templates/misago/admin/labels/form.html

@@ -6,7 +6,7 @@
 {% if target.pk %}
 {{ target.name }}
 {% else %}
-{% trans "New prefix" %}
+{% trans "New label" %}
 {% endif %} | {{ active_link.name }} | {{ block.super }}
 {% endblock title %}
 
@@ -15,7 +15,7 @@
 {% if target.pk %}
 {{ target.name }}
 {% else %}
-{% trans "New prefix" %}
+{% trans "New label" %}
 {% endif %}
 {% endblock page-target %}
 
@@ -25,7 +25,7 @@
   {% if target.pk %}
   {{ target.name }}
   {% else %}
-  {% trans "New prefix" %}
+  {% trans "New label" %}
   {% endif %}
 </h1>
 {% endblock %}

+ 8 - 8
misago/templates/misago/admin/prefixes/list.html → misago/templates/misago/admin/labels/list.html

@@ -4,16 +4,16 @@
 
 {% block page-actions %}
 <div class="page-actions">
-  <a href="{% url 'misago:admin:forums:prefixes:new' %}" class="btn btn-success">
+  <a href="{% url 'misago:admin:forums:labels:new' %}" class="btn btn-success">
     <span class="fa fa-plus-circle"></span>
-    {% trans "New prefix" %}
+    {% trans "New label" %}
   </a>
 </div>
 {% endblock %}
 
 
 {% block table-header %}
-<th>{% trans "Prefix" %}</th>
+<th>{% trans "Label" %}</th>
 <th style="width: 40%;">{% trans "CSS class" %}</th>
 {% for action in extra_actions %}
 <th style="width: 1%;">&nbsp;</th>
@@ -30,18 +30,18 @@
 <td>{% if item.css_class %}{{ item.css_class }}{% else %}&nbsp;{% endif %}</td>
 {% for action in extra_actions %}
 <td class="row-action">
-  <a href="{% url action.link prefix_id=item.id %}" class="btn btn-{% if action.style %}{{ action.style }}{% else %}default{% endif %} tooltip-top" title="{{ action.name }}">
+  <a href="{% url action.link label_id=item.id %}" class="btn btn-{% if action.style %}{{ action.style }}{% else %}default{% endif %} tooltip-top" title="{{ action.name }}">
     <span class="{{ action.icon }}"></span>
   </a>
 </td>
 {% endfor %}
 <td class="row-action">
-  <a href="{% url 'misago:admin:forums:prefixes:edit' prefix_id=item.id %}" class="btn btn-primary tooltip-top" title="{% trans "Edit" %}">
+  <a href="{% url 'misago:admin:forums:labels:edit' label_id=item.id %}" class="btn btn-primary tooltip-top" title="{% trans "Edit" %}">
     <span class="fa fa-pencil"></span>
   </a>
 </td>
 <td class="row-action">
-  <form action="{% url 'misago:admin:forums:prefixes:delete' prefix_id=item.id %}" method="post" class="delete-prompt">
+  <form action="{% url 'misago:admin:forums:labels:delete' label_id=item.id %}" method="post" class="delete-prompt">
     <button class="btn btn-danger tooltip-top" title="{% trans "Delete" %}">
       {% csrf_token %}
       <span class="fa fa-times"></span>
@@ -53,7 +53,7 @@
 
 {% block emptylist %}
 <td colspan="{{ 4|add:extra_actions_len }}">
-  <p>{% trans "No thread prefixes are currently defined." %}</p>
+  <p>{% trans "No thread labels are currently defined." %}</p>
 </td>
 {% endblock emptylist %}
 
@@ -62,7 +62,7 @@
 <script type="text/javascript">
   $(function() {
     $('.delete-prompt').submit(function() {
-      var decision = confirm("{% trans "Are you sure you want to delete this prefix?" %}");
+      var decision = confirm("{% trans "Are you sure you want to delete this label?" %}");
       return decision;
     });
   });

+ 2 - 0
misago/templates/misago/posting/threadlabelform.html

@@ -0,0 +1,2 @@
+{% load misago_forms %}
+{% form_input form.label %}

+ 0 - 2
misago/templates/misago/posting/threadprefixform.html

@@ -1,2 +0,0 @@
-{% load misago_forms %}
-{% form_input form.prefix %}

+ 3 - 3
misago/templates/misago/threads/base.html

@@ -62,10 +62,10 @@
               </div>
 
               <ul class="list-unstyled thread-flags">
-                {% if thread.prefix %}
+                {% if thread.label %}
                 <li>
-                  <span class="label label-solo label-{{ thread.prefix.css_class|default:"default" }}">
-                    {{ thread.prefix.name }}
+                  <span class="label label-solo label-{{ thread.label.css_class|default:"default" }}">
+                    {{ thread.label.name }}
                   </span>
                 </li>
                 {% endif %}

+ 12 - 12
misago/threads/admin.py

@@ -1,25 +1,25 @@
 from django.conf.urls import url
 from django.utils.translation import ugettext_lazy as _
 
-from misago.threads.views.prefixesadmin import (PrefixesList, NewPrefix,
-                                                EditPrefix, DeletePrefix)
+from misago.threads.views.labelsadmin import (LabelsList, NewLabel,
+                                              EditLabel, DeleteLabel)
 
 
 class MisagoAdminExtension(object):
     def register_urlpatterns(self, urlpatterns):
-        # Threads Prefixes
-        urlpatterns.namespace(r'^prefixes/', 'prefixes', 'forums')
-        urlpatterns.patterns('forums:prefixes',
-            url(r'^$', PrefixesList.as_view(), name='index'),
-            url(r'^new/$', NewPrefix.as_view(), name='new'),
-            url(r'^edit/(?P<prefix_id>\d+)/$', EditPrefix.as_view(), name='edit'),
-            url(r'^delete/(?P<prefix_id>\d+)/$', DeletePrefix.as_view(), name='delete'),
+        # Threads Labels
+        urlpatterns.namespace(r'^labels/', 'labels', 'forums')
+        urlpatterns.patterns('forums:labels',
+            url(r'^$', LabelsList.as_view(), name='index'),
+            url(r'^new/$', NewLabel.as_view(), name='new'),
+            url(r'^edit/(?P<label_id>\d+)/$', EditLabel.as_view(), name='edit'),
+            url(r'^delete/(?P<label_id>\d+)/$', DeleteLabel.as_view(), name='delete'),
         )
 
     def register_navigation_nodes(self, site):
-        site.add_node(name=_("Thread prefixes"),
+        site.add_node(name=_("Thread labels"),
                       icon='fa fa-tags',
                       parent='misago:admin:forums',
                       after='misago:admin:forums:nodes:index',
-                      namespace='misago:admin:forums:prefixes',
-                      link='misago:admin:forums:prefixes:index')
+                      namespace='misago:admin:forums:labels',
+                      link='misago:admin:forums:labels:index')

+ 6 - 6
misago/threads/forms/admin.py

@@ -4,22 +4,22 @@ from misago.core import forms
 from misago.core.validators import validate_sluggable
 from misago.forums.forms import ForumsMultipleChoiceField
 
-from misago.threads.models import Prefix
+from misago.threads.models import Label
 
 
-class PrefixForm(forms.ModelForm):
+class LabelForm(forms.ModelForm):
     name = forms.CharField(
-        label=_("Prefix name"), validators=[validate_sluggable()])
+        label=_("Label name"), validators=[validate_sluggable()])
     css_class = forms.CharField(
         label=_("CSS class"), required=False,
-        help_text=_("Optional CSS clas used to style this prefix."))
+        help_text=_("Optional CSS clas used to style this label."))
     forums = ForumsMultipleChoiceField(
         label=_('Forums'), required=False,
         widget=forms.CheckboxSelectMultiple(),
-        help_text=_('Select forums this prefix will be available in.'))
+        help_text=_('Select forums this label will be available in.'))
 
     class Meta:
-        model = Prefix
+        model = Label
         fields = ['name', 'css_class', 'forums']
 
     def clean_name(self):

+ 11 - 11
misago/threads/forms/posting.py

@@ -113,26 +113,26 @@ class ThreadForm(ReplyForm):
             raise forms.ValidationError(errors)
 
 
-class ThreadPrefixFormBase(forms.Form):
+class ThreadLabelFormBase(forms.Form):
     is_supporting = True
-    legend = _("Prefix")
-    template = "misago/posting/threadprefixform.html"
+    legend = _("Label")
+    template = "misago/posting/threadlabelform.html"
 
 
-def ThreadPrefixForm(*args, **kwargs):
-    prefixes = kwargs.pop('prefixes')
+def ThreadLabelForm(*args, **kwargs):
+    labels = kwargs.pop('labels')
 
-    choices = [(0, _("No prefix"))]
-    choices.extend([(prefix.pk, prefix.name ) for prefix in prefixes])
+    choices = [(0, _("No label"))]
+    choices.extend([(label.pk, label.name ) for label in labels])
 
     field = forms.TypedChoiceField(
-        label=_("Thread prefix"),
+        label=_("Thread label"),
         coerce=int,
         choices=choices)
 
-    FormType = type("ThreadPrefixFormFinal",
-                    (ThreadPrefixFormBase,),
-                    {'prefix': field})
+    FormType = type("ThreadLabelFormFinal",
+                    (ThreadLabelFormBase,),
+                    {'label': field})
 
     return FormType(*args, **kwargs)
 

+ 4 - 4
misago/threads/migrations/0001_initial.py

@@ -17,13 +17,13 @@ class Migration(migrations.Migration):
 
     operations = [
         migrations.CreateModel(
-            name='Prefix',
+            name='Label',
             fields=[
                 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
                 ('name', models.CharField(max_length=255)),
                 ('slug', models.SlugField(max_length=255)),
                 ('css_class', models.CharField(max_length=255, null=True, blank=True)),
-                ('forums', models.ManyToManyField(related_name=b'prefixes', to='misago_forums.Forum')),
+                ('forums', models.ManyToManyField(related_name=b'labels', to='misago_forums.Forum')),
             ],
             options={
             },
@@ -141,8 +141,8 @@ class Migration(migrations.Migration):
         ),
         migrations.AddField(
             model_name='thread',
-            name='prefix',
-            field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Prefix', null=True),
+            name='label',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='misago_threads.Label', null=True),
             preserve_default=True,
         ),
         migrations.AddField(

+ 1 - 1
misago/threads/models/__init__.py

@@ -1,4 +1,4 @@
 # flake8: noqa
+from misago.threads.models.label import *
 from misago.threads.models.post import *
-from misago.threads.models.prefix import *
 from misago.threads.models.thread import *

+ 62 - 0
misago/threads/models/label.py

@@ -0,0 +1,62 @@
+from django.db import models
+
+from misago.core.cache import cache
+from misago.core.utils import slugify
+
+
+CACHE_NAME = 'misago_threads_labels'
+
+
+class LabelManager(models.Manager):
+    def get_forum_labels(self, forum):
+        labels = []
+        for label in self.get_cached_labels():
+            if forum.pk in label.forums_ids:
+                labels.append(label)
+        return labels
+
+    def get_cached_labels_dict(self):
+        return dict([(label.pk, label) for label in self.get_cached_labels()])
+
+    def get_cached_labels(self):
+        labels = cache.get(CACHE_NAME, 'nada')
+        if labels == 'nada':
+            labels = []
+            labels_qs = self.all().prefetch_related('forums')
+            for label in labels_qs.order_by('name'):
+                label.forums_ids = [f.pk for f in label.forums.all()]
+                labels.append(label)
+            cache.set(CACHE_NAME, labels)
+        return labels
+
+    def clear_cache(self):
+        cache.delete(CACHE_NAME)
+
+
+class Label(models.Model):
+    forums = models.ManyToManyField('misago_forums.Forum')
+    name = models.CharField(max_length=255)
+    slug = models.SlugField(max_length=255)
+    css_class = models.CharField(max_length=255, null=True, blank=True)
+
+    objects = LabelManager()
+
+    def save(self, *args, **kwargs):
+        if self.pk:
+            self.strip_inavailable_labels()
+        Label.objects.clear_cache()
+        return super(Label, self).save(*args, **kwargs)
+
+    def delete(self, *args, **kwargs):
+        Label.objects.clear_cache()
+        return super(Label, self).delete(*args, **kwargs)
+
+    def strip_inavailable_labels(self):
+        qs = self.thread_set
+        if self.forums:
+            qs = qs.exclude(forum__in=self.forums.all())
+        qs.update(label=None)
+
+    def set_name(self, name):
+        self.name = name
+        self.slug = slugify(name)

+ 0 - 65
misago/threads/models/prefix.py

@@ -1,65 +0,0 @@
-from django.db import models
-
-from misago.core.cache import cache
-from misago.core.utils import slugify
-
-
-CACHE_NAME = 'misago_threads_prefixes'
-
-
-class PrefixManager(models.Manager):
-    def get_forum_prefixes(self, forum):
-        prefixes = []
-        for prefix in self.get_cached_prefixes():
-            if forum.pk in prefix.forums_ids:
-                prefixes.append(prefix)
-        return prefixes
-
-    def get_cached_prefixes_dict(self):
-        prefixes_dict = {}
-        for prefix in self.get_cached_prefixes():
-            prefixes_dict[prefix.pk] = prefix
-        return prefixes_dict
-
-    def get_cached_prefixes(self):
-        prefixes = cache.get(CACHE_NAME, 'nada')
-        if prefixes == 'nada':
-            prefixes = []
-            prefixes_qs = self.all().prefetch_related('forums')
-            for prefix in prefixes_qs.order_by('name'):
-                prefix.forums_ids = [f.pk for f in prefix.forums.all()]
-                prefixes.append(prefix)
-            cache.set(CACHE_NAME, prefixes)
-        return prefixes
-
-    def clear_cache(self):
-        cache.delete(CACHE_NAME)
-
-
-class Prefix(models.Model):
-    forums = models.ManyToManyField('misago_forums.Forum')
-    name = models.CharField(max_length=255)
-    slug = models.SlugField(max_length=255)
-    css_class = models.CharField(max_length=255, null=True, blank=True)
-
-    objects = PrefixManager()
-
-    def save(self, *args, **kwargs):
-        if self.pk:
-            self.strip_inavailable_prefixes()
-        Prefix.objects.clear_cache()
-        return super(Prefix, self).save(*args, **kwargs)
-
-    def delete(self, *args, **kwargs):
-        Prefix.objects.clear_cache()
-        return super(Prefix, self).delete(*args, **kwargs)
-
-    def strip_inavailable_prefixes(self):
-        qs = self.thread_set
-        if self.forums:
-            qs = qs.exclude(forum__in=self.forums.all())
-        qs.update(prefix=None)
-
-    def set_name(self, name):
-        self.name = name
-        self.slug = slugify(name)

+ 3 - 3
misago/threads/models/thread.py

@@ -17,9 +17,9 @@ PINNED = 1
 class Thread(models.Model):
     forum = models.ForeignKey('misago_forums.Forum')
     weight = models.PositiveIntegerField(default=0, db_index=True)
-    prefix = models.ForeignKey('misago_threads.Prefix',
-                               null=True, blank=True,
-                               on_delete=models.SET_NULL)
+    label = models.ForeignKey('misago_threads.Label',
+                              null=True, blank=True,
+                              on_delete=models.SET_NULL)
     title = models.CharField(max_length=255)
     slug = models.CharField(max_length=255)
     replies = models.PositiveIntegerField(default=0, db_index=True)

+ 6 - 6
misago/threads/permissions.py

@@ -91,8 +91,8 @@ class PermissionsForm(forms.Form):
         label=_("Can protect posts"),
         help_text=_("Only users with this permission "
                     "can edit protected posts."))
-    can_change_threads_prefix = forms.TypedChoiceField(
-        label=_("Can change threads prefix"), coerce=int, initial=0,
+    can_change_threads_labels = forms.TypedChoiceField(
+        label=_("Can change threads labels"), coerce=int, initial=0,
         choices=((0, _("No")), (1, _("Own threads")), (2, _("All threads"))))
     can_change_threads_weight = forms.TypedChoiceField(
         label=_("Can change threads weight"), coerce=int, initial=0,
@@ -151,7 +151,7 @@ def build_forum_acl(acl, forum, forums_roles, key_name):
         'can_hide_threads': 0,
         'can_hide_replies': 0,
         'can_protect_posts': 0,
-        'can_change_threads_prefix': 0,
+        'can_change_threads_labels': 0,
         'can_change_threads_weight': 0,
         'can_close_threads': 0,
         'can_review_moderated_content': 0,
@@ -173,7 +173,7 @@ def build_forum_acl(acl, forum, forums_roles, key_name):
         thread_edit_time=algebra.greater_or_zero,
         reply_edit_time=algebra.greater_or_zero,
         can_protect_posts=algebra.greater,
-        can_change_threads_prefix=algebra.greater,
+        can_change_threads_labels=algebra.greater,
         can_change_threads_weight=algebra.greater,
         can_close_threads=algebra.greater,
         can_review_moderated_content=algebra.greater,
@@ -212,7 +212,7 @@ def add_acl_to_forum(user, forum):
         'can_hide_threads': 0,
         'can_hide_replies': 0,
         'can_protect_posts': 0,
-        'can_change_threads_prefix': 0,
+        'can_change_threads_labels': 0,
         'can_change_threads_weight': 0,
         'can_close_threads': 0,
         'can_review_moderated_content': 0,
@@ -234,7 +234,7 @@ def add_acl_to_forum(user, forum):
             thread_edit_time=algebra.greater_or_zero,
             reply_edit_time=algebra.greater_or_zero,
             can_protect_posts=algebra.greater,
-            can_change_threads_prefix=algebra.greater,
+            can_change_threads_labels=algebra.greater,
             can_change_threads_weight=algebra.greater,
             can_close_threads=algebra.greater,
             can_review_moderated_content=algebra.greater,

+ 0 - 2
misago/threads/posting/__init__.py

@@ -8,8 +8,6 @@ from django.utils import timezone
 from misago.conf import settings
 from misago.core import forms
 
-from misago.threads.models import Prefix
-
 
 START = 0
 REPLY = 1

+ 30 - 0
misago/threads/posting/threadlabel.py

@@ -0,0 +1,30 @@
+from misago.threads.forms.posting import ThreadLabelForm
+from misago.threads.posting import PostingMiddleware
+
+
+class ThreadLabelFormMiddleware(PostingMiddleware):
+    def use_this_middleware(self):
+        if self.forum.acl['can_change_threads_labels'] and self.forum.labels:
+            self.thread_label_id = self.thread.label_id
+            return True
+        else:
+            return False
+
+    def make_form(self):
+        if self.request.method == 'POST':
+            return ThreadLabelForm(self.request.POST, prefix=self.prefix,
+                                    labels=self.forum.labels)
+        else:
+            initial = {'label_id': self.thread_label_id}
+            return ThreadLabelForm(prefix=self.prefix,
+                                    labels=self.forum.labels,
+                                    initial=initial)
+
+    def pre_save(self, form):
+        if self.thread_label_id != form.cleaned_data.get('label'):
+            if form.cleaned_data.get('label'):
+                self.thread.label_id = form.cleaned_data.get('label')
+                self.thread.update_fields.append('label')
+            else:
+                self.thread.label = None
+                self.thread.update_fields.append('label')

+ 0 - 30
misago/threads/posting/threadprefix.py

@@ -1,30 +0,0 @@
-from misago.threads.forms.posting import ThreadPrefixForm
-from misago.threads.posting import PostingMiddleware
-
-
-class ThreadPrefixFormMiddleware(PostingMiddleware):
-    def use_this_middleware(self):
-        if self.forum.acl['can_change_threads_prefix'] and self.forum.prefixes:
-            self.thread_prefix_id = self.thread.prefix_id
-            return True
-        else:
-            return False
-
-    def make_form(self):
-        if self.request.method == 'POST':
-            return ThreadPrefixForm(self.request.POST, prefix=self.prefix,
-                                    prefixes=self.forum.prefixes)
-        else:
-            initial = {'prefix_id': self.thread_prefix_id}
-            return ThreadPrefixForm(prefix=self.prefix,
-                                    prefixes=self.forum.prefixes,
-                                    initial=initial)
-
-    def pre_save(self, form):
-        if self.thread_prefix_id != form.cleaned_data.get('prefix'):
-            if form.cleaned_data.get('prefix'):
-                self.thread.prefix_id = form.cleaned_data.get('prefix')
-                self.thread.update_fields.append('prefix')
-            else:
-                self.thread.prefix = None
-                self.thread.update_fields.append('prefix')

+ 13 - 13
misago/threads/views/generic/forum.py

@@ -8,7 +8,7 @@ from misago.forums.lists import get_forums_list, get_forum_path
 
 from misago.threads.posting import (PostingInterrupt, EditorFormset,
                                     START, REPLY, EDIT)
-from misago.threads.models import ANNOUNCEMENT, Thread, Prefix
+from misago.threads.models import ANNOUNCEMENT, Thread, Label
 from misago.threads.views.generic.threads import OrderThreadsMixin, ThreadsView
 
 
@@ -77,12 +77,12 @@ class FilterThreadsMixin(object):
                     'name': _("With moderated posts"),
                     'is_label': False,
                 }))
-        for prefix in forum.prefixes:
+        for label in forum.labels:
             filters.append({
-                'type': prefix.slug,
-                'name': prefix.name,
+                'type': label.slug,
+                'name': label.name,
                 'is_label': True,
-                'css_class': prefix.css_class,
+                'css_class': label.css_class,
             })
         return filters
 
@@ -96,9 +96,9 @@ class FilterThreadsMixin(object):
         elif filter_by == 'moderated-posts':
             return queryset.filter(has_moderated_posts=True)
         else:
-            for prefix in forum.prefixes:
-                if prefix.slug == filter_by:
-                    return queryset.filter(prefix_id=prefix.pk)
+            for label in forum.labels:
+                if label.slug == filter_by:
+                    return queryset.filter(label_id=label.pk)
             else:
                 return queryset
 
@@ -134,14 +134,14 @@ class ForumView(FilterThreadsMixin, OrderThreadsMixin, ThreadsView):
         for thread in threads:
             thread.forum = forum
 
-        self.prefix_threads(threads, forum.prefixes)
+        self.label_threads(threads, forum.labels)
 
         return page, threads
 
-    def prefix_threads(self, threads, prefixes):
-        prefixes_dict = dict([(p.pk, p) for p in prefixes])
+    def label_threads(self, threads, labels):
+        labels_dict = dict([(label.pk, label) for label in labels])
         for thread in threads:
-            thread.prefix = prefixes_dict.get(thread.prefix_id)
+            thread.label = labels_dict.get(thread.label_id)
 
     def order_querysets(self, order_by, threads, announcements):
         if order_by == 'recently-replied':
@@ -207,7 +207,7 @@ class ForumView(FilterThreadsMixin, OrderThreadsMixin, ThreadsView):
 
     def dispatch(self, request, *args, **kwargs):
         forum = self.get_forum(request, **kwargs)
-        forum.prefixes = Prefix.objects.get_forum_prefixes(forum)
+        forum.labels = Label.objects.get_forum_labels(forum)
         links_params = self.get_default_link_params(forum)
 
         if forum.lft + 1 < forum.rght:

+ 2 - 2
misago/threads/views/generic/posting.py

@@ -9,7 +9,7 @@ from misago.forums.lists import get_forum_path
 
 from misago.threads.posting import (PostingInterrupt, EditorFormset,
                                     START, REPLY, EDIT)
-from misago.threads.models import ANNOUNCEMENT, Thread, Post, Prefix
+from misago.threads.models import ANNOUNCEMENT, Thread, Post, Label
 from misago.threads.permissions import allow_start_thread
 from misago.threads.views.generic.base import ViewBase
 
@@ -75,7 +75,7 @@ class EditorView(ViewBase):
         self.allow_mode(request.user, *mode_context)
 
         mode, forum, thread, post, quote = mode_context
-        forum.prefixes = Prefix.objects.get_forum_prefixes(forum)
+        forum.labels = Label.objects.get_forum_labels(forum)
         formset = EditorFormset(request=request,
                                 mode=mode,
                                 user=request.user,

+ 45 - 0
misago/threads/views/labelsadmin.py

@@ -0,0 +1,45 @@
+from django.contrib import messages
+from django.utils.translation import ugettext_lazy as _
+
+from misago.admin.views import generic
+from misago.core import cachebuster
+
+from misago.threads.models import Label
+from misago.threads.forms.admin import LabelForm
+
+
+class LabelsAdmin(generic.AdminBaseMixin):
+    root_link = 'misago:admin:forums:labels:index'
+    Model = Label
+    Form = LabelForm
+    templates_dir = 'misago/admin/labels'
+    message_404 = _("Requested thread label does not exist.")
+
+    def handle_form(self, form, request, target):
+        target.save()
+        target.forums.clear()
+        if form.cleaned_data.get('forums'):
+            target.forums.add(*[f for f in form.cleaned_data.get('forums')])
+        Label.objects.clear_cache()
+
+        if self.message_submit:
+            messages.success(request, self.message_submit % target.name)
+
+
+class LabelsList(LabelsAdmin, generic.ListView):
+    ordering = (('name', None),)
+
+
+class NewLabel(LabelsAdmin, generic.ModelFormView):
+    message_submit = _('New label "%s" has been saved.')
+
+
+class EditLabel(LabelsAdmin, generic.ModelFormView):
+    message_submit = _('Label "%s" has been edited.')
+
+
+class DeleteLabel(LabelsAdmin, generic.ButtonView):
+    def button_action(self, request, target):
+        target.delete()
+        message = _('Label "%s" has been deleted.')
+        messages.success(request, message % unicode(target.name))

+ 0 - 45
misago/threads/views/prefixesadmin.py

@@ -1,45 +0,0 @@
-from django.contrib import messages
-from django.utils.translation import ugettext_lazy as _
-
-from misago.admin.views import generic
-from misago.core import cachebuster
-
-from misago.threads.models import Prefix
-from misago.threads.forms.admin import PrefixForm
-
-
-class PrefixesAdmin(generic.AdminBaseMixin):
-    root_link = 'misago:admin:forums:prefixes:index'
-    Model = Prefix
-    Form = PrefixForm
-    templates_dir = 'misago/admin/prefixes'
-    message_404 = _("Requested thread prefix does not exist.")
-
-    def handle_form(self, form, request, target):
-        target.save()
-        target.forums.clear()
-        if form.cleaned_data.get('forums'):
-            target.forums.add(*[f for f in form.cleaned_data.get('forums')])
-        Prefix.objects.clear_cache()
-
-        if self.message_submit:
-            messages.success(request, self.message_submit % target.name)
-
-
-class PrefixesList(PrefixesAdmin, generic.ListView):
-    ordering = (('name', None),)
-
-
-class NewPrefix(PrefixesAdmin, generic.ModelFormView):
-    message_submit = _('New prefix "%s" has been saved.')
-
-
-class EditPrefix(PrefixesAdmin, generic.ModelFormView):
-    message_submit = _('Prefix "%s" has been edited.')
-
-
-class DeletePrefix(PrefixesAdmin, generic.ButtonView):
-    def button_action(self, request, target):
-        target.delete()
-        message = _('Prefix "%s" has been deleted.')
-        messages.success(request, message % unicode(target.name))