summaryrefslogtreecommitdiff
path: root/ishtar_common/utils.py
diff options
context:
space:
mode:
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
commit572b9047260322ed19cc9f674657b8be8d62c052 (patch)
tree0ed9392291c50980c7dbff14c9a05edc601076de /ishtar_common/utils.py
parent66a376e081e335cf94ecf6fd41e5fe13a5445c57 (diff)
downloadIshtar-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.py79
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):