diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-05 19:10:39 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-05 19:28:48 +0200 |
commit | ab4922e895dda6ce778f2cce785dc69f8d210288 (patch) | |
tree | 2039c5911319a7c2930584ec0e2b5c6977c2bdeb /ishtar_common/utils.py | |
parent | 7fb1ff25e2491e94c3446a401e644de9793006f5 (diff) | |
download | Ishtar-ab4922e895dda6ce778f2cce785dc69f8d210288.tar.bz2 Ishtar-ab4922e895dda6ce778f2cce785dc69f8d210288.zip |
Random image feature (refs #2958)
Diffstat (limited to 'ishtar_common/utils.py')
-rw-r--r-- | ishtar_common/utils.py | 53 |
1 files changed, 52 insertions, 1 deletions
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""" + <div class="welcome-image"> + <img src="{}"/><br/> + <em>{} - {}</em> + <a href="#" onclick="load_window(\'{}\')"> + <i class="fa fa-info-circle" aria-hidden="true"></i> + </a> + <a href="." title="{}"> + <i class="fa fa-random" aria-hidden="true"></i> + </a><br/> + </div>""".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 '' |