diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-01 15:50:52 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2018-06-12 09:57:24 +0200 |
commit | 572b9047260322ed19cc9f674657b8be8d62c052 (patch) | |
tree | 0ed9392291c50980c7dbff14c9a05edc601076de /ishtar_common/utils.py | |
parent | 66a376e081e335cf94ecf6fd41e5fe13a5445c57 (diff) | |
download | Ishtar-572b9047260322ed19cc9f674657b8be8d62c052.tar.bz2 Ishtar-572b9047260322ed19cc9f674657b8be8d62c052.zip |
Adapt forms, wizards, views, urls for new management of documents (refs #4107)
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 79 |
1 files changed, 30 insertions, 49 deletions
diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index ceaa7d27a..6c77563ef 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -34,7 +34,6 @@ from django.contrib.contenttypes.models import ContentType from django.contrib.gis.geos import GEOSGeometry from django.contrib.sessions.backends.db import SessionStore from django.core.cache import cache -from django.core.exceptions import FieldDoesNotExist from django.core.files import File from django.core.urlresolvers import reverse from django.utils.datastructures import MultiValueDict as BaseMultiValueDict @@ -205,13 +204,22 @@ def disable_for_loaddata(signal_handler): return wrapper -def _get_image_link(rel): - item = rel.item - image = rel.image +def _get_image_link(doc): # manage missing images - if not image.thumbnail or not image.thumbnail.url or not image.image \ - or not image.image.url: + if not doc.thumbnail or not doc.thumbnail.url or not doc.image \ + or not doc.image.url: return "" + + item = None + for related_key in doc.__class__.RELATED_MODELS: + q = getattr(doc, related_key) + if q.count(): + item = q.all()[0] + break + if not item: + # image attached to nothing... + return "" + return mark_safe(u""" <div class="col col-lg-3"> <div class="card"> @@ -235,8 +243,8 @@ def _get_image_link(rel): <script type="text/javascript"> lightGallery(document.getElementById('lightgallery-rand-img')); </script>""".format( - image.image.url, - image.thumbnail.url, + doc.image.url, + doc.thumbnail.url, unicode(item.__class__._meta.verbose_name), unicode(item), reverse(item.SHOW_URL, args=[item.pk, '']), @@ -245,49 +253,22 @@ def _get_image_link(rel): def get_random_item_image_link(request): - from archaeological_operations.models import OperationImage, Operation - from archaeological_context_records.models import ContextRecordImage, \ - ContextRecord - from archaeological_finds.models import Find, FindImage, TreatmentImage - - ope_image_nb, cr_image_nb, find_image_nb = 0, 0, 0 - q_ope = OperationImage.objects.filter( - image__thumbnail__isnull=False, - image__image__isnull=False - ).exclude(image__thumbnail='').exclude(image__image='') - q_cr = ContextRecordImage.objects.filter( - image__thumbnail__isnull=False, - image__image__isnull=False - ).exclude(image__thumbnail='').exclude(image__image='') - q_find = FindImage.objects.filter( - image__thumbnail__isnull=False, - image__image__isnull=False - ).exclude(image__thumbnail='').exclude(image__image='') - if request.user.has_perm('archaeological_operations.view_operation', - Operation): - ope_image_nb = q_ope.count() - if request.user.has_perm( - 'archaeological_context_records.view_contextrecord', - ContextRecord): - cr_image_nb = q_cr.count() - if request.user.has_perm('archaeological_finds.view_find', - Find): - find_image_nb = q_find.count() - - image_total = ope_image_nb + cr_image_nb + find_image_nb - if not image_total: + from ishtar_common.models import Document + + if not request.user.has_perm('ishtar_common.view_document'): + return '' + + q = Document.objects.filter( + thumbnail__isnull=False, + image__isnull=False + ).exclude(thumbnail='').exclude(image='') + + total = q.count() + if not total: return '' - image_nb = random.randint(0, image_total - 1) - if image_nb >= 0 and image_nb < ope_image_nb: - return _get_image_link(q_ope.all()[image_nb]) - if image_nb >= ope_image_nb and image_nb < (cr_image_nb + ope_image_nb): - return _get_image_link(q_cr.all()[image_nb - ope_image_nb]) - if image_nb >= (cr_image_nb + ope_image_nb): - return _get_image_link(q_find.all()[ - image_nb - ope_image_nb - cr_image_nb]) - # should never happen except in case of deletion during the excution - return '' + image_nb = random.randint(0, total) + return _get_image_link(q.all()[image_nb]) def convert_coordinates_to_point(x, y, z=None, srid=4326): |