Skip to content
Snippets Groups Projects
Commit 807e3711 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

Merge branch '56-scale-and-maybe-crop-uploaded-pictures' into 'master'

Resolve "Scale and maybe crop uploaded pictures"

Closes #56

See merge request Teckids/BiscuIT/BiscuIT-ng!36
parents 07a1cf95 1454d7a0
No related branches found
No related tags found
1 merge request!36Resolve "Scale and maybe crop uploaded pictures"
......@@ -40,7 +40,7 @@ PersonsAccountsFormSet = forms.modelformset_factory(
class EditPersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['user', 'is_active', 'first_name', 'last_name', 'additional_name', 'short_name', 'street', 'housenumber', 'postal_code', 'place', 'phone_number', 'mobile_number', 'email', 'date_of_birth', 'sex', 'photo']
fields = ['user', 'is_active', 'first_name', 'last_name', 'additional_name', 'short_name', 'street', 'housenumber', 'postal_code', 'place', 'phone_number', 'mobile_number', 'email', 'date_of_birth', 'sex', 'photo', 'photo_cropping']
new_user = forms.CharField(
required=False,
......
# Generated by Django 2.2.4 on 2019-08-29 12:12
from django.db import migrations
import image_cropping.fields
class Migration(migrations.Migration):
dependencies = [
('core', '0014_remove_unique'),
]
operations = [
migrations.AddField(
model_name='person',
name='photo_cropping',
field=image_cropping.fields.ImageRatioField('photo', '600x800', adapt_rotation=False, allow_fullsize=False, free_crop=False, help_text=None, hide_image_field=False, size_warning=True, verbose_name='photo cropping'),
),
migrations.AlterField(
model_name='person',
name='photo',
field=image_cropping.fields.ImageCropField(blank=True, null=True, upload_to='', verbose_name='Photo'),
),
]
......@@ -4,6 +4,7 @@ from django.contrib.auth import get_user_model
from django.db import models
from django.utils.translation import ugettext_lazy as _
from image_cropping import ImageCropField, ImageRatioField
from phonenumber_field.modelfields import PhoneNumberField
from .mixins import SchoolRelated
......@@ -68,7 +69,8 @@ class Person(SchoolRelated):
sex = models.CharField(verbose_name=_(
'Sex'), max_length=1, choices=SEX_CHOICES, blank=True)
photo = models.ImageField(verbose_name=_('Photo'), blank=True, null=True)
photo = ImageCropField(verbose_name=_('Photo'), blank=True, null=True)
photo_cropping = ImageRatioField('photo', '600x800', size_warning=True)
import_ref = models.CharField(verbose_name=_(
'Reference ID of import source'), max_length=64, blank=True, null=True, editable=False)
......
......@@ -5,6 +5,7 @@ import sys
from django.utils.translation import ugettext_lazy as _
from dynaconf import LazySettings
from easy_thumbnails.conf import Settings as thumbnail_settings
from .util.core_helpers import get_app_packages
......@@ -54,6 +55,8 @@ INSTALLED_APPS = [
'fa',
'django_any_js',
'django_tables2',
'easy_thumbnails',
'image_cropping',
'maintenance_mode',
'menu_generator',
'phonenumber_field',
......@@ -112,6 +115,13 @@ TEMPLATES = [
},
]
THUMBNAIL_PROCESSORS = (
'image_cropping.thumbnail_processors.crop_corners',
) + thumbnail_settings.THUMBNAIL_PROCESSORS
# Already included by base template / Bootstrap
IMAGE_CROPPING_JQUERY_URL = None
WSGI_APPLICATION = 'biscuit.core.wsgi.application'
......@@ -214,7 +224,8 @@ BOOTSTRAP4 = {
'jquery_url': _settings.get('bootstrap.jquery_url', '/javascript/jquery/jquery.min.js'),
'popper_url': _settings.get('bootstrap.popper_url', '/javascript/popper.js/umd/popper.min.js'),
'include_jquery': True,
'include_popper': True
'include_popper': True,
'javascript_in_head': True
}
DATATABLES_BASE = _settings.get(
......
......@@ -3,6 +3,11 @@
{% block page_title %}{% blocktrans %}Edit person{% endblocktrans %}{% endblock %}
{% block bootstrap4_extra_head %}
{{ block.super }}
{{ edit_person_form.media }}
{% endblock %}
{% block content %}
<form method="post" enctype="multipart/form-data">
......
{% load staticfiles %}
{% load staticfiles cropping %}
<div class="card shadow">
<div class="card-header">{{ person.first_name }} {{ person.last_name }}</div>
<div class="card-body">
<div class="row no-gutters">
<div class="col-sm">
{% if person.photo %}
<img class="person-img" src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}" />
<img class="person-img" src="{% cropped_thumbnail person 'photo_cropping' max_size='300x400' %}" alt="{{ person.first_name }} {{ person.last_name }}" />
{% else %}
<img class="person-img" src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}" />
{% endif %}
......
{% extends "core/base.html" %}
{% load bootstrap4 font_awesome i18n staticfiles %}
{% load bootstrap4 font_awesome i18n staticfiles cropping %}
{% load render_table from django_tables2 %}
{% block content %}
......@@ -16,7 +16,7 @@
<tr>
<td rowspan="6">
{% if person.photo %}
<img class="person-img" src="{{ person.photo.url }}" alt="{{ person.first_name }} {{ person.last_name }}" />
<img class="person-img" src="{% cropped_thumbnail person 'photo_cropping' max_size='300x400' %}" alt="{{ person.first_name }} {{ person.last_name }}" />
{% else %}
<img class="person-img" src="{% static 'img/fallback.png' %}" alt="{{ person.first_name }} {{ person.last_name }}" />
{% endif %}
......
......@@ -156,7 +156,7 @@ def edit_person(request: HttpRequest, id_: int) -> HttpResponse:
edit_person_form.save(commit=True)
messages.success(request, _('The person has been saved.'))
return redirect('persons')
return redirect('edit_person_by_id', id_=person.id)
context['edit_person_form'] = edit_person_form
......
......@@ -40,6 +40,8 @@ django-settings-context-processor = "^0.2"
django-auth-ldap = { version = "^2.0", optional = true }
django-maintenance-mode = "^0.13.3"
django-ipware = "^2.1"
easy-thumbnails = "^2.6"
django-image-cropping = "^1.2"
[tool.poetry.extras]
ldap = ["django-auth-ldap"]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment