src/jocondelab/views/ajax.py
author veltr
Mon, 16 Sep 2013 10:38:08 +0200
changeset 108 c0d227e8b0c4
parent 106 219e27e5e26d
child 110 597fa9d09973
permissions -rw-r--r--
Changes for contribution
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     2
'''
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     3
Created on Aug 20, 2013
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     4
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     5
@author: rvelt
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     6
'''
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
     7
101
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
     8
from jocondelab.models import DbpediaYears, DbpediaGeo, DbpediaFields, ContributedTerm, ContributedFields, Contribution
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
     9
from core.models import Notice, Term, Thesaurus
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    10
import django.utils.simplejson as json
106
219e27e5e26d Ajax Scroll Loading
veltr
parents: 104
diff changeset
    11
from django.core.paginator import Paginator
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    12
from django.http import HttpResponse
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    13
from django.template.response import TemplateResponse
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    14
from django.db.models import Sum
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    15
from django.conf import settings
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    16
104
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    17
def terms(request):
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    18
    
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    19
    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    20
    q = request.GET.get('term', None)
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    21
    count = request.GET.get('count', 20)
108
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
    22
    qs = DbpediaFields.objects.filter(language_code=lang,label__icontains=q).values('dbpedia_uri','label').distinct().order_by('label')[:count]
104
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    23
    res = [{"dbpedia_uri": r['dbpedia_uri'], "label": r['label']} for r in qs]
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    24
    return HttpResponse(content=json.dumps(res), mimetype='application/json')
e61d5a5d970e Search on terms
veltr
parents: 101
diff changeset
    25
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    26
def years(request):
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    27
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    28
    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    29
    from_year = request.GET.get('from_year', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    30
    to_year = request.GET.get('to_year', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    31
    count = request.GET.get('count', 20)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    32
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    33
    qs = DbpediaYears.objects.filter(term__dbpedia_fields__language_code=lang)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    34
    if to_year:
98
b174c4467f7c Added timeline view
veltr
parents: 97
diff changeset
    35
        qs = qs.filter(start_year__lte=to_year)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    36
    if from_year:
98
b174c4467f7c Added timeline view
veltr
parents: 97
diff changeset
    37
        qs = qs.filter(end_year__gte=from_year)
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    38
    qs = qs.values('start_year','end_year','term__dbpedia_fields__label','term__dbpedia_uri')
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    39
    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    40
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    41
    qs = qs[:count]
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    42
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    43
    results = [{
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    44
                "start_year": y["start_year"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    45
                "end_year": y["end_year"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    46
                "label": y["term__dbpedia_fields__label"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    47
                "sum_notices": y["sum_notices"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    48
                "dbpedia_uri": y["term__dbpedia_uri"]
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    49
                } for y in qs]
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    50
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    51
    return HttpResponse(content=json.dumps(results), mimetype='application/json')
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    52
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    53
def geo_coords(request):
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    54
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    55
    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    56
    min_lat = request.GET.get('min_lat', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    57
    max_lat = request.GET.get('max_lat', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    58
    min_lng = request.GET.get('min_lng', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    59
    max_lng = request.GET.get('max_lng', None)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    60
    count = request.GET.get('count', 20)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    61
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    62
    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    63
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    64
    if min_lat:
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    65
        qs = qs.filter(latitude__gt=min_lat)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    66
    if max_lat:
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    67
        qs = qs.filter(latitude__lt=max_lat)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    68
    if min_lng:
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    69
        qs = qs.filter(longitude__gt=min_lng)
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    70
    if max_lng:
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    71
        qs = qs.filter(longitude__lt=max_lng)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    72
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    73
    qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri')
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    74
    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    75
    
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    76
    qs = qs[:count]
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    77
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    78
    results = [{
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    79
                "latitude": y["latitude"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    80
                "longitude": y["longitude"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    81
                "label": y["term__dbpedia_fields__label"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    82
                "sum_notices": y["sum_notices"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    83
                "dbpedia_uri": y["term__dbpedia_uri"]
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    84
                } for y in qs]
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    85
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    86
    return HttpResponse(content=json.dumps(results), mimetype='application/json')
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
    87
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    88
def geo_search(request):
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    89
    
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    90
    lang = request.GET.get('lang', request.LANGUAGE_CODE)[:2]
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    91
    q = request.GET.get('term', None)
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    92
    count = request.GET.get('count', 20)
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    93
    
108
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
    94
    qs = DbpediaGeo.objects.filter(term__dbpedia_fields__language_code=lang, term__dbpedia_fields__label__icontains=q)
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    95
    qs = qs.values('latitude','longitude','term__dbpedia_fields__label','term__dbpedia_uri')
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    96
    qs = qs.annotate(sum_notices=Sum('term__nb_notice')).order_by('-sum_notices')[:count]
97
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    97
    
e7c675c54816 Added map view
veltr
parents: 96
diff changeset
    98
    results = [{
100
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
    99
                "latitude": y["latitude"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   100
                "longitude": y["longitude"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   101
                "label": y["term__dbpedia_fields__label"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   102
                "sum_notices": y["sum_notices"],
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   103
                "dbpedia_uri": y["term__dbpedia_uri"]
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   104
                } for y in qs]
25636bb50756 Grouped geographical locations and years by dbpedia uri
veltr
parents: 98
diff changeset
   105
    results.sort(key=lambda y: y["label"])
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
   106
    
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
   107
    return HttpResponse(content=json.dumps(results), mimetype='application/json')
101
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   108
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   109
def contribute(request):
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   110
    
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   111
    notice_id = request.POST.get('notice_id', None)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   112
    dbpedia_language = request.POST.get('dbpedia_language', None)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   113
    dbpedia_uri = request.POST.get('dbpedia_uri', None)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   114
    thesaurus_label = request.POST.get('thesaurus_label', None)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   115
    translations = json.loads(request.POST.get('translations', '[]'))
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   116
    
108
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   117
    thobj = Thesaurus.objects.get(label=thesaurus_label) if thesaurus_label else None
101
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   118
    notobj = Notice.objects.get(id=notice_id)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   119
    termobj, created = ContributedTerm.objects.get_or_create(dbpedia_uri=dbpedia_uri, dbpedia_language=dbpedia_language)
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   120
    controbj, created = Contribution.objects.get_or_create(term=termobj, thesaurus=thobj, notice=notobj, defaults={'contribution_count': 1})
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   121
    if not created:
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   122
        controbj.contribution_count += 1
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   123
        controbj.save()
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   124
    for t in translations:
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   125
        fieldsobj, created = ContributedFields.objects.get_or_create(term=termobj, dbpedia_uri=dbpedia_uri, language_code=t['language'], defaults={'abstract': t['abstract'], 'label': t['label'], 'thumbnail': t['thumbnail']})
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   126
        if not created:
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   127
            fieldsobj.abstract = t['abstract']
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   128
            fieldsobj.thumbnail = t['thumbnail']
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   129
            fieldsobj.label = t['label']
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   130
            fieldsobj.save()
19de76fe00a9 Added contribution
veltr
parents: 100
diff changeset
   131
108
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   132
    return HttpResponse(content=json.dumps({ "contribution_id": controbj.id, "contribution_count": controbj.contribution_count }), mimetype='application/json')
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   133
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   134
def contribution_vote(request, grade):
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   135
    
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   136
    contribution_id = request.POST.get('contribution_id', None)
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   137
    controbj = ContributedTerm.objects.get(id=contribution_id)
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   138
    controbj.contribution_count += grade
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   139
    controbj.save()
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   140
    
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   141
    return HttpResponse(content=json.dumps({ "contribution_id": controbj.id, "contribution_count": controbj.contribution_count }), mimetype='application/json')
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   142
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   143
def upvote(request):
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   144
    
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   145
    return contribution_vote(1)
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   146
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   147
def downvote(request):
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   148
    
c0d227e8b0c4 Changes for contribution
veltr
parents: 106
diff changeset
   149
    return contribution_vote(-1)
96
eca960eac58b Added Geo and Years tables
veltr
parents:
diff changeset
   150