Browse Source

Implemented misago_forms template tags #377

Rafał Pitoń 11 years ago
parent
commit
cdf31c0214

+ 0 - 0
misago/core/templatetags/__init__.py


+ 77 - 0
misago/core/templatetags/misago_forms.py

@@ -0,0 +1,77 @@
+from django import template
+from django.template import Context
+from django.template.loader import get_template
+from crispy_forms.templatetags import crispy_forms_field, crispy_forms_filters
+
+
+register = template.Library()
+
+
+"""
+Form row: renders single row in form
+
+Syntax:
+{% form_row form.field %} # renders vertical field
+{% form_row form.field "col-md-3" "col-md-9" %} # renders horizontal field
+"""
+@register.tag
+def form_row(parser, token):
+    args = token.split_contents()
+
+    if len(args) < 2:
+        raise template.TemplateSyntaxError(
+            "form_row tag requires at least one argument")
+
+    if len(args) == 3 or len(args) > 4:
+        raise template.TemplateSyntaxError(
+            "form_row tag supports either one argument (form field) or "
+            "four arguments (form field, label class, field class)")
+
+    form_field = args[1]
+
+    if len(args) == 4:
+        label_class = args[2]
+        field_class = args[3]
+    else:
+        label_class = None
+        field_class = None
+
+    return FormRowNode(form_field, label_class, field_class)
+
+
+class FormRowNode(template.Node):
+    def __init__(self, form_field, label_class, field_class):
+        self.form_field = template.Variable(form_field)
+        self.label_class = template.Variable(label_class)
+        self.field_class = template.Variable(field_class)
+
+    def render(self, context):
+        field = self.form_field.resolve(context)
+
+        try:
+            label_class = self.label_class.resolve(context)
+        except:
+            label_class = self.label_class
+
+        try:
+            field_class = self.field_class.resolve(context)
+        except:
+            field_class = self.field_class
+
+        template_pack = crispy_forms_filters.TEMPLATE_PACK
+        template = get_template('%s/field.html' % template_pack)
+        c = Context({
+            'field': field,
+            'form_show_errors': True,
+            'form_show_labels': True,
+            'label_class': label_class,
+            'field_class': field_class})
+        return template.render(c)
+
+
+"""
+Form input: renders given field input
+"""
+@register.tag
+def form_input(parser, token):
+    return crispy_forms_field.crispy_field(parser, token)

+ 32 - 20
misago/templates/misago/admin/warnings/form.html

@@ -1,21 +1,21 @@
 {% extends "misago/admin/generic/form.html" %}
 {% extends "misago/admin/generic/form.html" %}
-{% load crispy_forms_filters i18n %}
+{% load i18n misago_forms %}
 
 
 
 
 {% block title %}
 {% block title %}
 {% if target.pk %}
 {% if target.pk %}
-{% trans target.banned_value %}
+{% trans target.name %}
 {% else %}
 {% else %}
-{% trans "New ban" %}
+{% trans "New warning level" %}
 {% endif %} | {{ active_link.name }} | {{ block.super }}
 {% endif %} | {{ active_link.name }} | {{ block.super }}
 {% endblock title %}
 {% endblock title %}
 
 
 
 
 {% block page-target %}
 {% block page-target %}
 {% if target.pk %}
 {% if target.pk %}
-{% trans target.banned_value %}
+{% trans target.name %}
 {% else %}
 {% else %}
-{% trans "New ban" %}
+{% trans "New warning level" %}
 {% endif %}
 {% endif %}
 {% endblock page-target %}
 {% endblock page-target %}
 
 
@@ -23,32 +23,44 @@
 {% block form-header %}
 {% block form-header %}
 <h1>
 <h1>
   {% if target.pk %}
   {% if target.pk %}
-  {% trans target.banned_value %}
+  {% trans target.name %}
   {% else %}
   {% else %}
-  {% trans "New ban" %}
+  {% trans "New warning level" %}
   {% endif %}
   {% endif %}
 </h1>
 </h1>
 {% endblock %}
 {% endblock %}
 
 
 
 
+{% block form-extra %}
+class="form-horizontal"
+{% endblock form-extra%}
+
+
 {% block form-body %}
 {% block form-body %}
-<div class="form-body">
-  <fieldset>
-    <legend>{% trans "Ban settings" %}</legend>
+{% with label_class="col-md-3" field_class="col-md-9" %}
+  <div class="form-body">
+    <fieldset>
+      <legend>{% trans "Name and description" %}</legend>
+
+        {% form_row form.name label_class field_class %}
+        {% form_row form.description label_class field_class %}
+
+    </fieldset>
+    <fieldset>
+      <legend>{% trans "Expiration time" %}</legend>
 
 
-    {{ form.test|as_crispy_field }}
-    {{ form.banned_value|as_crispy_field }}
-    {{ form.valid_until|as_crispy_field }}
+        {% form_row form.expires_after_minutes label_class field_class %}
 
 
-  </fieldset>
-  <fieldset>
-    <legend>{% trans "Messages" %}</legend>
+    </fieldset>
+    <fieldset>
+      <legend>{% trans "Restrictions" %}</legend>
 
 
-    {{ form.user_message|as_crispy_field }}
-    {{ form.staff_message|as_crispy_field }}
+        {% form_row form.restricts_posting_replies label_class field_class %}
+        {% form_row form.restricts_posting_threads label_class field_class %}
 
 
-  </fieldset>
-</div>
+    </fieldset>
+  </div>
+{% endwith %}
 {% endblock form-body %}
 {% endblock form-body %}
 
 
 
 

+ 1 - 1
misago/templates/misago/admin/warnings/list.html

@@ -4,7 +4,7 @@
 
 
 {% block page-actions %}
 {% block page-actions %}
 <div class="page-actions">
 <div class="page-actions">
-  <a href="{% url 'misago:admin:users:ranks:new' %}" class="btn btn-success">
+  <a href="{% url 'misago:admin:users:warnings:new' %}" class="btn btn-success">
     <span class="fa fa-plus-circle"></span>
     <span class="fa fa-plus-circle"></span>
     {% trans "New level" %}
     {% trans "New level" %}
   </a>
   </a>

+ 18 - 0
misago/users/admin.py

@@ -5,6 +5,8 @@ from misago.users.views.admin.ranks import (RanksList, NewRank, EditRank,
                                             DeleteRank, MoveUpRank,
                                             DeleteRank, MoveUpRank,
                                             MoveDownRank, DefaultRank)
                                             MoveDownRank, DefaultRank)
 from misago.users.views.admin.users import UsersList, NewUser, EditUser
 from misago.users.views.admin.users import UsersList, NewUser, EditUser
+from misago.users.views.admin.warnings import (WarningsList, NewWarning,
+                                               EditWarning, DeleteWarning)
 
 
 
 
 class MisagoAdminExtension(object):
 class MisagoAdminExtension(object):
@@ -43,6 +45,15 @@ class MisagoAdminExtension(object):
             url(r'^delete/(?P<ban_id>\d+)/$', DeleteBan.as_view(), name='delete'),
             url(r'^delete/(?P<ban_id>\d+)/$', DeleteBan.as_view(), name='delete'),
         )
         )
 
 
+        # Warnings
+        urlpatterns.namespace(r'^warnings/', 'warnings', 'users')
+        urlpatterns.patterns('users:warnings',
+            url(r'^$', WarningsList.as_view(), name='index'),
+            url(r'^new/$', NewWarning.as_view(), name='new'),
+            url(r'^edit/(?P<ban_id>\d+)/$', EditWarning.as_view(), name='edit'),
+            url(r'^delete/(?P<ban_id>\d+)/$', DeleteWarning.as_view(), name='delete'),
+        )
+
     def register_navigation_nodes(self, site):
     def register_navigation_nodes(self, site):
         site.add_node(name=_("Users"),
         site.add_node(name=_("Users"),
                       icon='fa fa-users',
                       icon='fa fa-users',
@@ -70,3 +81,10 @@ class MisagoAdminExtension(object):
                       after='misago:admin:users:ranks:index',
                       after='misago:admin:users:ranks:index',
                       namespace='misago:admin:users:bans',
                       namespace='misago:admin:users:bans',
                       link='misago:admin:users:bans:index')
                       link='misago:admin:users:bans:index')
+
+        site.add_node(name=_("Warning levels"),
+                      icon='fa fa-exclamation-triangle',
+                      parent='misago:admin:users',
+                      after='misago:admin:users:bans:index',
+                      namespace='misago:admin:users:warnings',
+                      link='misago:admin:users:warnings:index')

+ 5 - 3
misago/users/forms/admin.py

@@ -357,7 +357,9 @@ Warning levels
 class WarningLevelForm(forms.ModelForm):
 class WarningLevelForm(forms.ModelForm):
     name = forms.CharField(label=_("Level name"), max_length=255)
     name = forms.CharField(label=_("Level name"), max_length=255)
     description = forms.CharField(
     description = forms.CharField(
-        label=_("Optional level description"), required=False, max_length=1000,
+        label=_("Description"), required=False, max_length=1000,
+        help_text=_("Optional message description displayed to users with "
+                    "this warning level."),
         widget=forms.Textarea(attrs={'rows': 3}),
         widget=forms.Textarea(attrs={'rows': 3}),
         error_messages={
         error_messages={
             'max_length': _("Description can't be longer "
             'max_length': _("Description can't be longer "
@@ -369,10 +371,10 @@ class WarningLevelForm(forms.ModelForm):
                     "imposed on member until it's reduced, or 0 to make "
                     "imposed on member until it's reduced, or 0 to make "
                     "this warning level permanent."))
                     "this warning level permanent."))
     restricts_posting_replies = forms.TypedChoiceField(
     restricts_posting_replies = forms.TypedChoiceField(
-        label=_("Restrictions on posting replies"),
+        label=_("Posting replies"),
         coerce=int, choices=RESTRICTIONS_CHOICES)
         coerce=int, choices=RESTRICTIONS_CHOICES)
     restricts_posting_threads = forms.TypedChoiceField(
     restricts_posting_threads = forms.TypedChoiceField(
-        label=_("Restrictions on posting threads"),
+        label=_("Posting threads"),
         coerce=int, choices=RESTRICTIONS_CHOICES)
         coerce=int, choices=RESTRICTIONS_CHOICES)
 
 
     class Meta:
     class Meta: