web/hdalab/views/pages.py
author veltr
Fri, 26 Oct 2012 16:14:25 +0200
changeset 260 a15e8cb98525
parent 253 1113c3874dd6
permissions -rw-r--r--
Remove tag translations for french language
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
253
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     2
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     3
from django.shortcuts import render_to_response, redirect
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     4
from django.template import RequestContext
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     5
from hdabo.models import Datasheet, TaggedSheet
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     6
import re
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     7
import django.utils.simplejson as json
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     8
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
     9
def datasheet(request, hda_id=None):
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    10
    MAX_TAG = 15
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    11
    MAX_RELATED = 50
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    12
    
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    13
    datasheet = Datasheet.objects.select_related("organisation").get(hda_id=hda_id)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    14
    
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    15
    domain = re.findall(r"^https?://(www\.)?([^/]+)",datasheet.url)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    16
    ordered_tags = TaggedSheet.objects.filter(datasheet=datasheet,order__lte=MAX_TAG).select_related("tag").order_by('order')
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    17
    tags = [t.tag.id for t in ordered_tags]
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    18
    tagorders = dict([(t.tag.id,t.order) for t in ordered_tags])
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    19
    tsqs = TaggedSheet.objects.exclude(datasheet=datasheet).filter(order__lte=MAX_TAG,tag_id__in=tags)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    20
    dsscores = {}
260
a15e8cb98525 Remove tag translations for french language
veltr
parents: 253
diff changeset
    21
    addtoscore = 2*MAX_TAG
253
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    22
    
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    23
    for ts in tsqs:
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    24
        a_order = tagorders[ts.tag_id]
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    25
        b_order = ts.order
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    26
        score = addtoscore - a_order - b_order
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    27
        dsscore = dsscores.get(ts.datasheet_id,0)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    28
        dsscores[ts.datasheet_id] = dsscore + score
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    29
    relatedqs = Datasheet.objects.filter(id__in=dsscores.keys()).select_related("organisation")
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    30
    relatedds = [{
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    31
        'id': ds.id,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    32
        'hda_id': ds.hda_id,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    33
        'title': ds.title,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    34
        'description': ds.description,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    35
        'organisation_name': ds.organisation.name,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    36
        'organisation_url': ds.organisation.website,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    37
        'score': dsscores.get(ds.id,0),
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    38
    } for ds in relatedqs]
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    39
    relatedds = sorted(relatedds, key=lambda ds: -ds['score'])[:MAX_RELATED]
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    40
    
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    41
    for ds in relatedds:
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    42
        otqs = TaggedSheet.objects.filter(datasheet_id=ds['id'],order__lte=MAX_TAG).select_related("tag").order_by('order')
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    43
        ds['ordered_tags'] = [{
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    44
            'id': t.tag.id,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    45
            'label': t.tag.label,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    46
            'order': t.order,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    47
            'common' : (t.tag.id in tags)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    48
        } for t in otqs]
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    49
    
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    50
    return render_to_response(
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    51
        "notice.html",
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    52
        {
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    53
            'datasheet':datasheet,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    54
            'domain': domain[0][1] if domain else "",
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    55
            'ordered_tags': ordered_tags,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    56
            'related': relatedds,
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    57
        },
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    58
        context_instance=RequestContext(request)
1113c3874dd6 Added Datasheet View
veltr
parents:
diff changeset
    59
    )