Browse Source

Making rank default

Rafał Pitoń 11 years ago
parent
commit
952276febb

+ 18 - 2
misago/templates/misago/admin/ranks/list.html

@@ -19,6 +19,7 @@
 <th style="width: 1%;">&nbsp;</th>
 <th style="width: 1%;">&nbsp;</th>
 <th style="width: 1%;">&nbsp;</th>
+<th style="width: 1%;">&nbsp;</th>
 {% endblock table-header %}
 
 
@@ -26,10 +27,13 @@
 <td class="lead">
   {{ item.name }}
   {% if item.is_tab %}
-  <div class="fa fa-list text-primary pull-right tooltip-top" title="{% trans "Has page on users list." %}"></div>
+  <div class="fa fa-list text-muted pull-right tooltip-top" title="{% trans "Has page on users list." %}"></div>
   {% endif %}
   {% if item.is_on_index %}
-  <div class="fa fa-bookmark text-success pull-right tooltip-top" title="{% trans "Users online displayed on index." %}"></div>
+  <div class="fa fa-bookmark text-muted pull-right tooltip-top" title="{% trans "Users online displayed on index." %}"></div>
+  {% endif %}
+  {% if item.is_default %}
+  <div class="fa fa-star text-muted pull-right tooltip-top" title="{% trans "This is default rank assigned to new members." %}"></div>
   {% endif %}
 </td>
 <td>
@@ -40,6 +44,18 @@
   {% endif %}
 </td>
 <td class="row-action">
+  {% if not item.is_default %}
+  <form action="{% url 'misago:admin:users:ranks:default' rank_id=item.id %}" method="post">
+    <button class="btn btn-warning tooltip-top" title="{% trans "Make default" %}">
+      {% csrf_token %}
+      <span class="fa fa-star"></span>
+    </button>
+  </form>
+  {% else %}
+  &nbsp;
+  {% endif %}
+</td>
+<td class="row-action">
   {% if not forloop.last %}
   <form action="{% url 'misago:admin:users:ranks:down' rank_id=item.id %}" method="post">
     <button class="btn btn-default tooltip-top" title="{% trans "Move down" %}">

+ 7 - 1
misago/users/models/rankmodel.py

@@ -1,4 +1,4 @@
-from django.db import models
+from django.db import models, transaction
 from django.utils.translation import ugettext_lazy as _
 from django.utils.translation import ugettext_lazy as _
 from misago.admin import site
@@ -9,6 +9,12 @@ class RankManager(models.Manager):
     def default(self):
         return self.get(is_default=True)
 
+    def make_rank_default(self, rank):
+        with transaction.atomic():
+            self.filter(is_default=True).update(is_default=False)
+            rank.is_default = True
+            rank.save(update_fields=['is_default'])
+
 
 class Rank(models.Model):
     name = models.CharField(max_length=255)

+ 3 - 1
misago/users/urls/admin.py

@@ -2,7 +2,8 @@ from django.conf.urls import url
 from misago.admin import urlpatterns
 from misago.users.views.useradmin import UsersList
 from misago.users.views.rankadmin import (RanksList, NewRank, EditRank,
-                                          DeleteRank, MoveUpRank, MoveDownRank)
+                                          DeleteRank, MoveUpRank, MoveDownRank,
+                                          DefaultRank)
 
 
 # Users section
@@ -23,6 +24,7 @@ urlpatterns.patterns('users:ranks',
     url(r'^$', RanksList.as_view(), name='index'),
     url(r'^new/$', NewRank.as_view(), name='new'),
     url(r'^edit/(?P<rank_id>\d+)/$', EditRank.as_view(), name='edit'),
+    url(r'^default/(?P<rank_id>\d+)/$', DefaultRank.as_view(), name='default'),
     url(r'^move/up/(?P<rank_id>\d+)/$', MoveUpRank.as_view(), name='up'),
     url(r'^move/down/(?P<rank_id>\d+)/$', MoveDownRank.as_view(), name='down'),
     url(r'^delete/(?P<rank_id>\d+)/$', DeleteRank.as_view(), name='delete'),

+ 11 - 0
misago/users/views/rankadmin.py

@@ -54,3 +54,14 @@ class MoveDownRank(RankAdmin, generic.ButtonView):
             target.save(update_fields=['order'])
             message = _('Rank "%s" has been moved down.') % unicode(target.name)
             messages.success(request, message)
+
+
+class DefaultRank(RankAdmin, generic.ButtonView):
+    def check_permissions(self, request, target):
+        if target.is_default:
+            return _('Rank "%s" is already default.') % unicode(target.name)
+
+    def button_action(self, request, target=None):
+        Rank.objects.make_rank_default(target)
+        message = _('Rank "%s" has been made default.')
+        messages.success(request, message % unicode(target.name))