Rafał Pitoń 11 лет назад
Родитель
Сommit
47252c0255

+ 18 - 11
misago/static/misago/css/misago/usercp.less

@@ -3,19 +3,26 @@
 // --------------------------------------------------
 
 
-.usercp-avatar-options {
-  ul {
-    li {
-      a, .btn-link {
-        display: inline-block;
-        margin: 0px;
-        padding: 0px;
+.form-avatar-home {
+  border-top: 1px solid @form-panel-border;
+  padding: @form-panel-padding;
+  padding-top: @line-height-computed;
+  padding-bottom: @line-height-computed;
 
-        line-height: @line-height-computed;
-      }
+  .usercp-avatar-options {
+    ul {
+      li {
+        a, .btn-link {
+          display: inline-block;
+          margin: 0px;
+          padding: 0px;
+
+          line-height: @line-height-computed;
+        }
 
-      a {
-        padding: 1px 0px;
+        a {
+          padding: 1px 0px;
+        }
       }
     }
   }

+ 8 - 0
misago/templates/misago/admin/users/edit.html

@@ -52,6 +52,14 @@ class="form-horizontal"
 
   </fieldset>
   <fieldset>
+    <legend>{% trans "Avatar" %}</legend>
+
+    {% form_row form.is_avatar_banned label_class field_class %}
+    {% form_row form.avatar_ban_user_message label_class field_class %}
+    {% form_row form.avatar_ban_staff_message label_class field_class %}
+
+  </fieldset>
+  <fieldset>
     <legend>{% trans "Signature" %}</legend>
 
     {% form_row form.signature label_class field_class %}

+ 12 - 1
misago/templates/misago/usercp/change_avatar.html

@@ -14,13 +14,23 @@
       </h2>
     </div>
 
-    <div class="form-body message">
+    <div class="form-body form-avatar-home">
 
       <div class="media">
         <span class="pull-left">
           <img class="media-object img-rounded" src="{{ user|avatar:avatar_size }}" width="{{ avatar_size }}" height="{{ avatar_size }}" alt="{% trans "Your current avatar" %}">
         </span>
         <div class="media-body usercp-avatar-options">
+          {% if user.is_avatar_banned %}
+          <h4 class="media-heading">{% trans "Change avatar:" %}</h4>
+          <div class="lead">
+            {% if user.avatar_ban_user_message %}
+            {{ user.avatar_ban_user_message|escape|urlize|linebreaks }}
+            {% else %}
+            <p>{% trans "You have been banned from changing your avatar." %}</p>
+            {% endif %}
+          </div>
+          {% else %}
           <h4 class="media-heading">{% trans "Change avatar:" %}</h4>
 
           <ul class="list-unstyled">
@@ -45,6 +55,7 @@
               </a>
             </li>
           </ul>
+          {% endif %}
 
         </div>
       </div>

+ 1 - 1
misago/users/avatars/dynamic.py

@@ -48,7 +48,7 @@ def draw_avatar_bg(user, image):
     rgb = ImageColor.getrgb(main_color)
 
     bg_drawer = ImageDraw.Draw(image)
-    bg_drawer.rectangle([(0, 0), image_size], main_color)
+    bg_drawer.rectangle([(0, 0), image_size], rgb)
 
     image_steps = 4
     step_size = math.ceil(float(image_size[0]) / image_steps)

+ 23 - 4
misago/users/forms/admin.py

@@ -71,13 +71,31 @@ class EditUserForm(UserBaseForm):
         widget=forms.PasswordInput,
         required=False)
 
+    is_avatar_banned = forms.YesNoSwitch(
+        label=_("Ban avatar changes"),
+        help_text=_("Setting this to yes will ban user from "
+                    "changing his/her avatar, and will reset "
+                    "his/her avatar to procedurally generated one."))
+    avatar_ban_user_message = forms.CharField(
+        label=_("User ban message"),
+        help_text=_("Optional message for user explaining "
+                    "why he/she is banned form changing avatar."),
+        widget=forms.Textarea(attrs={'rows': 3}),
+        required=False)
+    avatar_ban_staff_message = forms.CharField(
+        label=_("Staff ban message"),
+        help_text=_("Optional message for forum team members explaining "
+                    "why user is banned form changing avatar."),
+        widget=forms.Textarea(attrs={'rows': 3}),
+        required=False)
+
     signature = forms.CharField(
         label=_("Signature contents"),
         widget=forms.Textarea(attrs={'rows': 3}),
         required=False)
     is_signature_banned = forms.YesNoSwitch(
         label=_("Ban editing signature"),
-        help_text=_("Changing this to yes will ban user from "
+        help_text=_("Setting this to yes will ban user from "
                     "making changes to his/her signature."))
     signature_ban_user_message = forms.CharField(
         label=_("User ban message"),
@@ -94,9 +112,10 @@ class EditUserForm(UserBaseForm):
 
     class Meta:
         model = get_user_model()
-        fields = ['username', 'email', 'title', 'signature',
-                  'is_signature_banned', 'signature_ban_user_message',
-                  'signature_ban_staff_message']
+        fields = ['username', 'email', 'title', 'is_avatar_banned',
+                  'avatar_ban_user_message', 'avatar_ban_staff_message',
+                  'signature', 'is_signature_banned',
+                  'signature_ban_user_message', 'signature_ban_staff_message']
 
     def clean_signature(self):
         data = self.cleaned_data['signature']

+ 4 - 0
misago/users/views/admin/users.py

@@ -8,6 +8,7 @@ from misago.admin.views import generic
 from misago.conf import settings
 from misago.core.mail import mail_users
 
+from misago.users.avatars.dynamic import set_avatar as set_dynamic_avatar
 from misago.users.forms.admin import (StaffFlagUserFormFactory, NewUserForm,
                                       EditUserForm, SearchUsersForm)
 from misago.users.models import ACTIVATION_REQUIRED_NONE, User
@@ -137,6 +138,9 @@ class EditUser(UserAdmin, generic.ModelFormView):
             target.set_email(form.cleaned_data['email'])
             start_admin_session(request, target)
 
+        if form.cleaned_data.get('is_avatar_banned'):
+            set_dynamic_avatar(target)
+
         if form.cleaned_data.get('staff_level'):
             form.instance.staff_level = form.cleaned_data['staff_level']
 

+ 1 - 4
misago/users/views/avatarserver.py

@@ -13,10 +13,7 @@ def serve_user_avatar(request, user_id, size):
     if user_id > 0:
         try:
             user = User.objects.get(id=user_id)
-            if not user.is_avatar_banned:
-                avatar_file = get_user_avatar_file(user, size)
-            else:
-                avatar_file = get_blank_avatar_file(size)
+            avatar_file = get_user_avatar_file(user, size)
         except User.DoesNotExist:
             avatar_file = get_blank_avatar_file(size)
     else:

+ 1 - 1
misago/users/views/usercp.py

@@ -56,7 +56,7 @@ def change_forum_options(request):
 def change_avatar(request):
     avatar_size = max(settings.MISAGO_AVATARS_SIZES)
 
-    if request.method == 'POST':
+    if not request.user.is_avatar_banned and request.method == 'POST':
         if 'download-gravatar' in request.POST:
             try:
                 avatars.gravatar.set_avatar(request.user)