Browse Source

Dumb fallback for situations when user uploads avatar without JS enabled.

Ralfp 12 years ago
parent
commit
bcc63c5467

+ 22 - 2
misago/usercp/avatar/views.py

@@ -126,7 +126,28 @@ def upload(request):
                     raise ValidationError()
                     raise ValidationError()
                 image.seek(0)
                 image.seek(0)
                 image.save(image_path)
                 image.save(image_path)
-                return redirect(reverse('usercp_avatar_upload_crop'))
+                if request.POST.get('js_check'):
+                    return redirect(reverse('usercp_avatar_upload_crop'))
+                # Redirect to crop page didnt happen, handle avatar with old school hollywood way
+                image_path = settings.MEDIA_ROOT + 'avatars/'
+                source = Image.open(image_path + request.user.avatar_temp)
+                image_name, image_extension = path(request.user.avatar_temp).splitext()
+                image_name = '%s_%s%s' % (request.user.pk, get_random_string(8), image_extension)
+                resizeimage(source, settings.AVATAR_SIZES[0], image_path + image_name, info=source.info, format=source.format)
+                for size in settings.AVATAR_SIZES[1:]:
+                    resizeimage(source, size, image_path + str(size) + '_' + image_name, info=source.info, format=source.format)
+                # Update user model one more time
+                request.user.delete_avatar_image()
+                request.user.delete_avatar_original()
+                request.user.avatar_type = 'upload'
+                request.user.avatar_original = '%s_org_%s%s' % (request.user.pk, get_random_string(8), image_extension)
+                source.save(image_path + request.user.avatar_original)
+                request.user.delete_avatar_temp()
+                request.user.avatar_image = image_name
+                request.user.save(force_update=True)
+                # Set message and adios!
+                request.messages.set_flash(Message(_("Your avatar has changed.")), 'success', 'usercp_avatar')
+                return redirect(reverse('usercp_avatar'))
             except ValidationError:
             except ValidationError:
                 request.user.delete_avatar()
                 request.user.delete_avatar()
                 request.user.default_avatar(request.settings)
                 request.user.default_avatar(request.settings)
@@ -189,7 +210,6 @@ def crop(request, upload=False):
                 request.user.delete_avatar_temp()
                 request.user.delete_avatar_temp()
                 request.user.avatar_image = image_name
                 request.user.avatar_image = image_name
                 request.user.save(force_update=True)
                 request.user.save(force_update=True)
-                
                 request.messages.set_flash(Message(_("Your avatar has been cropped.")), 'success', 'usercp_avatar')
                 request.messages.set_flash(Message(_("Your avatar has been cropped.")), 'success', 'usercp_avatar')
                 return redirect(reverse('usercp_avatar'))
                 return redirect(reverse('usercp_avatar'))
             except Exception:
             except Exception:

+ 10 - 1
templates/sora/usercp/avatar.html

@@ -23,9 +23,18 @@
     <ul class="unstyled">
     <ul class="unstyled">
       {% if 'gravatar' in settings.avatars_types and user.avatar_type != 'gravatar' %}<li><i class="icon-share"></i> <form action="{% url 'usercp_avatar_gravatar' %}" method="post" class="form-button"><button type="submit" class="btn btn-link">{% trans %}Use Gravatar{% endtrans %}</button><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"></form></li>{% endif %}
       {% if 'gravatar' in settings.avatars_types and user.avatar_type != 'gravatar' %}<li><i class="icon-share"></i> <form action="{% url 'usercp_avatar_gravatar' %}" method="post" class="form-button"><button type="submit" class="btn btn-link">{% trans %}Use Gravatar{% endtrans %}</button><input type="hidden" name="{{ csrf_id }}" value="{{ csrf_token }}"></form></li>{% endif %}
       {% if 'gallery' in settings.avatars_types %}<li><i class="icon-th"></i> <a href="{% url 'usercp_avatar_gallery' %}">{% trans %}Pick Avatar from Gallery{% endtrans %}</a></li>{% endif %}
       {% if 'gallery' in settings.avatars_types %}<li><i class="icon-th"></i> <a href="{% url 'usercp_avatar_gallery' %}">{% trans %}Pick Avatar from Gallery{% endtrans %}</a></li>{% endif %}
-      {% if user.avatar_type == 'upload' %}<li><i class="icon-fullscreen"></i> <a href="{% url 'usercp_avatar_crop' %}">{% trans %}Crop Your Avatar{% endtrans %}</a></li>{% endif %}
+      {% if user.avatar_type == 'upload' %}<li id="crop-js" style="display: none;"><i class="icon-fullscreen"></i> <a href="{% url 'usercp_avatar_crop' %}">{% trans %}Crop Your Avatar{% endtrans %}</a></li>{% endif %}
       {% if 'upload' in settings.avatars_types %}<li><i class="icon-picture"></i> <a href="{% url 'usercp_avatar_upload' %}">{% trans %}Upload Avatar{% endtrans %}</a></li>{% endif %}
       {% if 'upload' in settings.avatars_types %}<li><i class="icon-picture"></i> <a href="{% url 'usercp_avatar_upload' %}">{% trans %}Upload Avatar{% endtrans %}</a></li>{% endif %}
     </ul>
     </ul>
   </div>
   </div>
 </div>
 </div>
+{% endblock %}
+
+{% block javascripts %}
+{{ super() }}
+    <script type="text/javascript">
+      $(function($){
+        $('#crop-js').show();
+      });
+    </script>
 {% endblock %}
 {% endblock %}

+ 1 - 1
templates/sora/usercp/avatar_crop.html

@@ -49,7 +49,7 @@
           onSelect: updatePreview,
           onSelect: updatePreview,
           aspectRatio: 1,
           aspectRatio: 1,
           minSize: [50, 50],
           minSize: [50, 50],
-          setSelect: [ 0, 0, 5000, 5000 ],
+          setSelect: [ 0, 0, {{ avatar_size }}, {{ avatar_size }} ],
         },function(){
         },function(){
           // Use the API to get the real image size
           // Use the API to get the real image size
           var bounds = this.getBounds();
           var bounds = this.getBounds();

+ 11 - 0
templates/sora/usercp/avatar_upload.html

@@ -10,10 +10,21 @@
 <h2>{% trans %}Upload Avatar{% endtrans %} <small>{% trans %}Change your Avatar{% endtrans %}</small></h2>
 <h2>{% trans %}Upload Avatar{% endtrans %} <small>{% trans %}Change your Avatar{% endtrans %}</small></h2>
 {% if message %}{{ macros.draw_message(message, 'alert-form') }}{% endif %}
 {% if message %}{{ macros.draw_message(message, 'alert-form') }}{% endif %}
 <form action="{% url 'usercp_avatar_upload' %}" method="post" enctype="multipart/form-data">
 <form action="{% url 'usercp_avatar_upload' %}" method="post" enctype="multipart/form-data">
+  <input type="hidden" id="js_check" name="js_check" value="0">
   {{ form_theme.form_widget(form, width=9) }}
   {{ form_theme.form_widget(form, width=9) }}
   <div class="form-actions">
   <div class="form-actions">
   	<button name="save" type="submit" class="btn btn-primary">{% trans %}Upload Avatar{% endtrans %}</button>
   	<button name="save" type="submit" class="btn btn-primary">{% trans %}Upload Avatar{% endtrans %}</button>
   	<a href="{% url 'usercp_avatar' %}" class="btn">{% trans %}Cancel{% endtrans %}</a>
   	<a href="{% url 'usercp_avatar' %}" class="btn">{% trans %}Cancel{% endtrans %}</a>
   </div>
   </div>
 </form>
 </form>
+{% endblock %}
+
+
+{% block javascripts %}
+{{ super() }}
+    <script type="text/javascript">
+      $(function($){
+        $('#js_check').val(1);
+      });
+    </script>
 {% endblock %}
 {% endblock %}