From ab4922e895dda6ce778f2cce785dc69f8d210288 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Mon, 5 Sep 2016 19:10:39 +0200 Subject: Random image feature (refs #2958) --- ishtar_common/utils.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) (limited to 'ishtar_common/utils.py') diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index d4973012e..cb45d32e1 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -17,9 +17,13 @@ # See the file COPYING for details. +import random + from django.conf import settings from django.core.cache import cache -from django.utils.translation import ugettext +from django.core.urlresolvers import reverse +from django.utils.safestring import mark_safe +from django.utils.translation import ugettext_lazy as _, ugettext from django.template.defaultfilters import slugify @@ -61,3 +65,50 @@ def shortify(lbl, number=20): def mode(array): most = max(list(map(array.count, array))) return list(set(filter(lambda x: array.count(x) == most, array))) + + +def _get_image_link(item): + return mark_safe(u""" +
+
+ {} - {} + + + + + +
+
""".format( + item.thumbnail.url, + unicode(item.__class__._meta.verbose_name), + unicode(item), + reverse(item.SHOW_URL, args=[item.pk, '']), + unicode(_(u"Load another random image?")))) + + +def get_random_item_image_link(): + from archaeological_operations.models import Operation + from archaeological_context_records.models import ContextRecord + from archaeological_finds.models import Find + ope_image_nb = Operation.objects.filter(image__isnull=False).count() + cr_image_nb = ContextRecord.objects.filter(image__isnull=False).count() + find_image_nb = Find.objects.filter(image__isnull=False).count() + + image_total = ope_image_nb + cr_image_nb + find_image_nb + if not image_total: + return '' + + image_nb = random.randint(0, image_total - 1) + if image_nb >= 0 and image_nb < ope_image_nb: + return _get_image_link( + Operation.objects.filter(image__isnull=False).all()[image_nb]) + if image_nb >= ope_image_nb and image_nb < (cr_image_nb + ope_image_nb): + return _get_image_link( + ContextRecord.objects.filter(image__isnull=False).all()[ + image_nb - ope_image_nb]) + if image_nb >= (cr_image_nb + ope_image_nb): + return _get_image_link( + Find.objects.filter(image__isnull=False).all()[ + image_nb - ope_image_nb - cr_image_nb]) + # should never happen except in case of deletion during the excution + return '' -- cgit v1.2.3