diff options
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): | 
