Browse Source

- Admin Form page supports tabbed display
- User avatar and signature is editable from User Admin

Ralfp 12 years ago
parent
commit
2b8fe4719e

+ 2 - 0
misago/admin/widgets.py

@@ -402,6 +402,7 @@ class FormWidget(BaseWidget):
     submit_button = _("Save Changes")
     submit_button = _("Save Changes")
     form = None
     form = None
     layout = None
     layout = None
+    tabbed = False
     target_name = None
     target_name = None
     original_name = None
     original_name = None
     submit_fallback = False
     submit_fallback = False
@@ -486,6 +487,7 @@ class FormWidget(BaseWidget):
                                                  'url': self.get_url(request, model),
                                                  'url': self.get_url(request, model),
                                                  'fallback': self.get_fallback_url(request),
                                                  'fallback': self.get_fallback_url(request),
                                                  'message': message,
                                                  'message': message,
+                                                 'tabbed': self.tabbed,
                                                  'target': self.get_target_name(original_model),
                                                  'target': self.get_target_name(original_model),
                                                  'target_model': original_model,
                                                  'target_model': original_model,
                                                  'form': FormLayout(form, self.get_layout(request, form, target)),
                                                  'form': FormLayout(form, self.get_layout(request, form, target)),

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

@@ -13,6 +13,13 @@ class UserForm(Form):
     roles = False
     roles = False
     email = forms.EmailField(max_length=255)
     email = forms.EmailField(max_length=255)
     new_password = forms.CharField(max_length=255,required=False,widget=forms.PasswordInput)
     new_password = forms.CharField(max_length=255,required=False,widget=forms.PasswordInput)
+    signature = forms.CharField(widget=forms.Textarea,required=False)
+    avatar_ban = forms.BooleanField(widget=YesNoSwitch,required=False) 
+    avatar_ban_reason_user = forms.CharField(widget=forms.Textarea,required=False)
+    avatar_ban_reason_admin = forms.CharField(widget=forms.Textarea,required=False)
+    signature_ban = forms.BooleanField(widget=YesNoSwitch,required=False)
+    signature_ban_reason_user = forms.CharField(widget=forms.Textarea,required=False)
+    signature_ban_reason_admin = forms.CharField(widget=forms.Textarea,required=False)
     
     
     layout = [
     layout = [
               [
               [
@@ -20,15 +27,32 @@ class UserForm(Form):
                [
                [
                 ('username', {'label': _("Username"), 'help_text': _("Username is name under which user is known to other users. Between 3 and 15 characters, only letters and digits are allowed.")}),
                 ('username', {'label': _("Username"), 'help_text': _("Username is name under which user is known to other users. Between 3 and 15 characters, only letters and digits are allowed.")}),
                 ('title', {'label': _("User Title"), 'help_text': _("To override user title with custom one, enter it here.")}),
                 ('title', {'label': _("User Title"), 'help_text': _("To override user title with custom one, enter it here.")}),
-                ('rank', {'label': _("User Rank"), 'help_text': _("This users's rank.")}),
-                ('roles', {'label': _("User Roles"), 'help_text': _("This user's roles. Roles are sets of user permissions")}),
+                ('rank', {'label': _("User Rank"), 'help_text': _("This user rank.")}),
+                ('roles', {'label': _("User Roles"), 'help_text': _("This user roles. Roles are sets of user permissions")}),
                 ],
                 ],
                ],
                ],
               [
               [
                _("Sign-in Credentials"),
                _("Sign-in Credentials"),
                [
                [
                 ('email', {'label': _("E-mail Address"), 'help_text': _("Username is name under which user is known to other users.")}),
                 ('email', {'label': _("E-mail Address"), 'help_text': _("Username is name under which user is known to other users.")}),
-                ('new_password', {'label': _("Change User Password"), 'help_text': _("If you wish to change user's password, enter here new password. Otherwhise leave this field blank"), 'has_value': False}),
+                ('new_password', {'label': _("Change User Password"), 'help_text': _("If you wish to change user password, enter here new password. Otherwhise leave this field blank."), 'has_value': False}),
+                ],
+               ],
+              [
+               _("User Avatar"),
+               [
+                ('avatar_ban', {'label': _("Lock Member's Avatar"), 'help_text': _("If you set this field to yes, this member's avatar will be deleted and replaced with random one selected from _removed gallery and member will not be able to change his avatar.")}),
+                ('avatar_ban_reason_user', {'label': _("User-visible reason for lock"), 'help_text': _("You can leave message to member explaining why he or she is unable to change his avatar anymore. This message will be displayed to member in his control panel.")}),
+                ('avatar_ban_reason_admin', {'label': _("Forum Team-visible reason for lock"), 'help_text': _("You can leave message to other forum team members exmplaining why this member's avatar has been locked.")}),
+                ],
+               ],
+              [
+               _("User Signature"),
+               [
+                ('signature', {'label': _("Signature"), 'help_text': _("Signature is short message attached at end of member's messages.")}),
+                ('signature_ban', {'label': _("Lock Member's Signature"), 'help_text': _("If you set this field to yes, this member will not be able to change his signature.")}),
+                ('signature_ban_reason_user', {'label': _("User-visible reason for lock"), 'help_text': _("You can leave message to member explaining why he or she is unable to edit his signature anymore. This message will be displayed to member in his control panel.")}),
+                ('signature_ban_reason_admin', {'label': _("Forum Team-visible reason for lock"), 'help_text': _("You can leave message to other forum team members exmplaining why this member's signature has been locked.")}),
                 ],
                 ],
                ],
                ],
               ]
               ]

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

@@ -182,6 +182,7 @@ class Edit(FormWidget):
     name = _("Edit User")
     name = _("Edit User")
     fallback = 'admin_users'
     fallback = 'admin_users'
     form = UserForm
     form = UserForm
+    tabbed = True
     target_name = 'username'
     target_name = 'username'
     notfound_message = _('Requested User could not be found.')
     notfound_message = _('Requested User could not be found.')
     submit_fallback = True
     submit_fallback = True
@@ -204,12 +205,33 @@ class Edit(FormWidget):
                 'email': model.email,
                 'email': model.email,
                 'rank': model.rank,
                 'rank': model.rank,
                 'roles': model.roles.all(),
                 'roles': model.roles.all(),
+                'avatar_ban': model.avatar_ban,
+                'avatar_ban_reason_user': model.avatar_ban_reason_user,
+                'avatar_ban_reason_admin': model.avatar_ban_reason_admin,
+                'signature': model.signature,
+                'signature_ban': model.signature_ban,
+                'signature_ban_reason_user': model.signature_ban_reason_user,
+                'signature_ban_reason_admin': model.signature_ban_reason_admin,
                 }
                 }
     
     
     def submit_form(self, request, form, target):
     def submit_form(self, request, form, target):
         target.title = form.cleaned_data['title']
         target.title = form.cleaned_data['title']
         target.rank = form.cleaned_data['rank']
         target.rank = form.cleaned_data['rank']
+        target.avatar_ban_reason_user = form.cleaned_data['avatar_ban_reason_user']
+        target.avatar_ban_reason_admin = form.cleaned_data['avatar_ban_reason_admin']
+        target.set_signature(form.cleaned_data['signature'])
+        target.signature_ban = form.cleaned_data['signature_ban']
+        target.signature_ban_reason_user = form.cleaned_data['signature_ban_reason_user']
+        target.signature_ban_reason_admin = form.cleaned_data['signature_ban_reason_admin']
         
         
+        # Do avatar ban mumbo-jumbo
+        if target.avatar_ban != form.cleaned_data['avatar_ban']:
+            if form.cleaned_data['avatar_ban']:
+                target.lock_avatar()
+            else:
+                target.default_avatar(request.settings)
+        target.avatar_ban = form.cleaned_data['avatar_ban']
+               
         # Update user roles
         # Update user roles
         if request.user.is_god():
         if request.user.is_god():
             target.roles.clear()
             target.roles.clear()

+ 7 - 0
misago/users/models.py

@@ -254,6 +254,13 @@ class User(models.Model):
     def set_username(self, username):
     def set_username(self, username):
         self.username = username.strip()
         self.username = username.strip()
         self.username_slug = slugify(username)
         self.username_slug = slugify(username)
+     
+    def set_signature(self, signature):
+        self.signature = signature.strip()
+        self.signature_preparsed = ''
+        if self.signature:
+            import markdown
+            self.signature_preparsed = markdown.markdown(value, safe_mode='escape', output_format=format)
         
         
     def is_username_valid(self, e):
     def is_username_valid(self, e):
         try:
         try:

+ 7 - 2
templates/_forms.html

@@ -3,8 +3,8 @@
 {# Render whole form macro #}
 {# Render whole form macro #}
 {%- macro form_widget(form, horizontal=false, width=12) -%}
 {%- macro form_widget(form, horizontal=false, width=12) -%}
 <fieldset>
 <fieldset>
-  <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">{% for field in form.hidden %}
-  <input type="hidden" name="{{ field.id }}" value="{{ field.value }}">{% endfor %}{% for fieldset in form.fieldsets %}{% if fieldset.legend %}
+  {{ form_hidden_widget(form) }}
+  {% for fieldset in form.fieldsets %}{% if fieldset.legend %}
   <legend><div>{{ fieldset.legend }}{% if fieldset.help %} <span>{{ fieldset.help }}</span>{% endif %}</div></legend>{% endif %}
   <legend><div>{{ fieldset.legend }}{% if fieldset.help %} <span>{{ fieldset.help }}</span>{% endif %}</div></legend>{% endif %}
   {% for field in fieldset.fields %}
   {% for field in fieldset.fields %}
     {{ row_widget(field, horizontal=horizontal, width=width) }}
     {{ row_widget(field, horizontal=horizontal, width=width) }}
@@ -13,6 +13,11 @@
 <fieldset>{% endif %}{% endfor %}
 <fieldset>{% endif %}{% endfor %}
 {%- endmacro -%}
 {%- endmacro -%}
 
 
+{# Render hidden fields macro #}
+{%- macro form_hidden_widget(form) -%}
+  <input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}">{% for field in form.hidden %}
+  <input type="hidden" name="{{ field.id }}" value="{{ field.value }}">{% endfor %}
+{%- endmacro -%}
 
 
 {# Render form row macro #}
 {# Render form row macro #}
 {%- macro row_widget(field, horizontal=false, width=12) -%}
 {%- macro row_widget(field, horizontal=false, width=12) -%}

+ 30 - 0
templates/admin/admin/form.html

@@ -8,7 +8,23 @@
 
 
 {% block action_body %}
 {% block action_body %}
 <form action="{{ url }}" method="post">
 <form action="{{ url }}" method="post">
+  {% if tabbed %}
+  {{ form_theme.form_hidden_widget(form) }}
+  <ul class="nav nav-tabs" id="form-tabs">{% for fieldset in form.fieldsets %}
+    <li{% if loop.first %} class="active"{% endif%}><a href="#form-tab-{{ loop.index }}" data-toggle="tab">{{ fieldset.legend }}</a></li>{% endfor %}
+  </ul>
+  <div class="tab-content">  	
+    {% for fieldset in form.fieldsets %}
+    <div class="tab-pane{% if loop.first %} active{% endif%}" id="form-tab-{{ loop.index }}">
+      <fieldset>{% for field in fieldset.fields %}
+          {{ form_theme.row_widget(field) }}{% endfor %}
+      </fieldset>
+    </div>
+    {% endfor %}
+  </div>
+  {% else %}
   {{ form_theme.form_widget(form) }}
   {{ form_theme.form_widget(form) }}
+  {% endif %}
   <div class="form-actions">
   <div class="form-actions">
   	<button name="save" type="submit" class="btn btn-primary">{{ action.submit_button }}</button>
   	<button name="save" type="submit" class="btn btn-primary">{{ action.submit_button }}</button>
   	{% if action.get_edit_url -%}
   	{% if action.get_edit_url -%}
@@ -21,3 +37,17 @@
   </div>
   </div>
 </form>
 </form>
 {% endblock %}
 {% endblock %}
+
+{% block javascripts %}
+{{ super() }}
+{% if tabbed %}
+    <script>
+      $(function () {
+        $('#form-tabs a').click(function (e) {
+          e.preventDefault();
+          $(this).tab('show');
+        });
+      });
+    </script>
+{% endif %}
+{% endblock %}