web/hdabo/views.py
author ymh <ymh.work@gmail.com>
Tue, 14 Jun 2011 14:17:12 +0200
changeset 29 d12f11960bb6
parent 28 2cc86e8db2ec
child 30 c21f88ad164d
permissions -rw-r--r--
correct tag creation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     1
from django.conf import settings
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     2
from django.contrib.auth.decorators import login_required #@UnusedImport
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
     3
from django.db.models import Max
27
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     4
from django.shortcuts import render_to_response
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     5
from django.template import RequestContext
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     6
from hdabo.management.commands.querywikipedia import process_tag
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     7
from hdabo.wp_utils import normalize_tag, query_wikipedia_title
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     8
from models import Organisation, Datasheet, TaggedSheet, Tag
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
     9
from wikitools import wiki
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    10
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    11
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    12
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    13
def home(request):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    14
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    15
    # Get all organisations
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    16
    orgas = Organisation.objects.all()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    17
    # Count all validated, unvalidated sheets for each organisation
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    18
    org_list = []
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    19
    for orga in orgas :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    20
        all_datasheets = Datasheet.objects.filter(organisation=orga)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    21
        nb_all = len(all_datasheets)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    22
        nb_val = len(all_datasheets.filter(validated=True))
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    23
        nb_unval = len(all_datasheets.filter(validated=False))
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    24
        org_list.append({'organisation':orga, 'nb_all':nb_all, 'nb_val':nb_val, 'nb_unval':nb_unval})
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    25
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    26
    
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
    27
    return render_to_response("organisation_list.html",
27
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    28
                              {'organisations':org_list},
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    29
                              context_instance=RequestContext(request))
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    30
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    31
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    32
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    33
def list_for_orga(request, orga_id=None, valid=None, start_index=None):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    34
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    35
    orga = Organisation.objects.get(id=orga_id)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    36
    orga_name = orga.name
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    37
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    38
    if start_index :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    39
        try:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    40
            start_index = int(start_index)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    41
        except :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    42
            start_index = 0
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    43
    else :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    44
        start_index = 0
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    45
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    46
    # If valid = 0, we search unvalidated sheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    47
    # If valid = 1, we search validated sheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    48
    # If valid = 2, we search AND DISPLAY all sheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    49
    if valid == "1" :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    50
        # We count all the validated sheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    51
        datasheets = Datasheet.objects.filter(organisation=orga).filter(validated=True)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    52
        nb_sheets = len(datasheets)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    53
        # And select the current one
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    54
        datasheets = [datasheets[start_index]]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    55
    elif valid != "2":
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    56
        # We count all the validated sheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    57
        datasheets = Datasheet.objects.filter(organisation=orga).filter(validated=False)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    58
        nb_sheets = len(datasheets)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    59
        # And select the current one
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    60
        datasheets = [datasheets[start_index]]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    61
    else :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    62
        datasheets = Datasheet.objects.filter(organisation=orga)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    63
        nb_sheets = len(datasheets)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    64
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    65
    # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    66
    ordered_tags = None
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    67
    if valid != "2" :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    68
        ordered_tags = TaggedSheet.objects.filter(datasheet=datasheets[0]).order_by('order')
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    69
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    70
    displayed_index = start_index + 1;
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    71
    prev_index = max(start_index - 1, 0);
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    72
    next_index = min(nb_sheets - 1, start_index + 1);
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    73
    last_index = max(nb_sheets - 1, 0);
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    74
    
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
    75
    return render_to_response("list_for_orga.html",
27
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    76
                              {'datasheets':datasheets, 'orga_name':orga_name,
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    77
                               'nb_sheets':nb_sheets, 'orga_id':orga_id, 'ordered_tags':ordered_tags,
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    78
                               'prev_index':prev_index, 'next_index':next_index, 'last_index':last_index,
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    79
                               'start_index':start_index, 'displayed_index':displayed_index, 'valid':valid},
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    80
                              context_instance=RequestContext(request))
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    81
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    82
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    83
def tag_up_down(request):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    84
    ds_id = request.POST["datasheet_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    85
    #tag_id = request.POST["tag_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    86
    # tag_pos indicates the position (from 0) of the tag in the list. NB : it is different from the TagSheet.order in the database.
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    87
    tag_pos = int(request.POST["tag_pos"])
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    88
    # move can be "u" or "d", for up and down
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    89
    move = request.POST["move"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    90
    # First we get the datasheet's TaggedSheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    91
    ordered_tags = TaggedSheet.objects.filter(datasheet=Datasheet.objects.filter(id=ds_id)[0]).order_by('order')
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    92
    # We get the current TaggedSheet and its's order
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    93
    #ts = ordered_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    94
    ts = ordered_tags[tag_pos]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    95
    tag_order = ts.order
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    96
    # We get the other TaggedSheet that will be moved
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    97
    if move == "u" :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    98
        other_ts = ordered_tags[tag_pos - 1]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
    99
    elif move == "d" :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   100
        other_ts = ordered_tags[tag_pos + 1]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   101
    else :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   102
        other_ts = None
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   103
    # We switch the orders
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   104
    if other_ts :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   105
        ts.order = other_ts.order
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   106
        other_ts.order = tag_order
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   107
        ts.save()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   108
        other_ts.save()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   109
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   110
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   111
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   112
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   113
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   114
def get_tag_table(request=None, ds_id=None, valid=None):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   115
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   116
    ordered_tags = TaggedSheet.objects.filter(datasheet=Datasheet.objects.filter(id=ds_id)[0]).order_by('order')
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   117
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   118
    return render_to_response("partial/tag_table.html",
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   119
                              {'ordered_tags':ordered_tags, 'valid':valid},
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   120
                              context_instance=RequestContext(request))
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   121
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   122
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   123
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   124
def remove_tag_from_list(request=None):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   125
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   126
    ds_id = request.POST["datasheet_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   127
    tag_id = request.POST["tag_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   128
    # First we get the datasheet's TaggedSheets
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   129
    ds_tags = TaggedSheet.objects.filter(datasheet=Datasheet.objects.filter(id=ds_id)[0])
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   130
    # We get the current TaggedSheet and we delete it
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   131
    ts = ds_tags.filter(tag=Tag.objects.filter(id=tag_id))[0]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   132
    ts.delete()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   133
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   134
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   135
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   136
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   137
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   138
def validate_wp_link(request=None):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   139
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   140
    ds_id = request.POST["datasheet_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   141
    tag_id = request.POST["tag_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   142
    if request.POST["activated"] != "false" :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   143
        wp_activ = True
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   144
    else :
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   145
        wp_activ = False
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   146
    # First we get the tag object
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   147
    tag = Tag.objects.filter(id=tag_id)[0]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   148
    tag.wikipedia_activated = wp_activ
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   149
    tag.save()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   150
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   151
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   152
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   153
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   154
def modify_tag(request):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   155
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   156
    tag_id = request.POST["id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   157
    tag_label = request.POST["value"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   158
    ds_id = request.POST["datasheet_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   159
        
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   160
    tag = Tag.objects.get(id=tag_id)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   161
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   162
    if tag.label != tag_label:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   163
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   164
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   165
        tag.label = tag_label
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   166
        
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   167
        site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   168
        new_label, status, url, pageid, response = query_wikipedia_title(site, tag_label) #@UnusedVariable                    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   169
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   170
        if status is not None:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   171
            tag.url_status = status
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   172
        if url is not None:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   173
            tag.wikipedia_url = url
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   174
            tag.wikipedia_activated = True
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   175
        else:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   176
            tag.wikipedia_url = None
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   177
            tag.wikipedia_activated = False
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   178
            
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   179
        if pageid is not None:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   180
            tag.wikipedia_pageid = pageid
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   181
        else:
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   182
            tag.wikipedia_pageid = None
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   183
            
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   184
        tag.save()
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   185
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   186
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   187
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   188
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   189
#@login_required
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   190
def reset_wikipedia_info(request):
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   191
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   192
    tag_id = request.POST["tag_id"]    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   193
    ds_id = request.POST["datasheet_id"]
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   194
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   195
    tag = Tag.objects.get(id=tag_id)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   196
    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   197
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   198
    tag.label = normalize_tag(tag.original_label)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   199
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   200
    process_tag(site, tag, 0)
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   201
    
056c19e37eab fusionner
cavaliet
parents: 25 26
diff changeset
   202
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   203
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   204
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   205
#@login_required
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   206
def add_tag(request=None):
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   207
    
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   208
    ds_id = request.POST["datasheet_id"]
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   209
    tag_label = request.POST["value"]
29
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   210
    
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   211
    tag_label_normalized = normalize_tag(tag_label)
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   212
    # We get the wikipedia references for the tag_label
29
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   213
    # We get or create the tag object
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   214
    tag_objs = Tag.objects.filter(label__iexact=tag_label_normalized)
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   215
    if len(tag_objs) == 0:
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   216
        tag = Tag(label=tag_label_normalized, original_label=tag_label)
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   217
        tag.save()
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   218
        created=True
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   219
    else:
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   220
        tag = tag_objs[0]
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   221
        created=False
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   222
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   223
    site = wiki.Wiki(settings.WIKIPEDIA_API_URL) #@UndefinedVariable
29
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   224
    new_label, status, url, pageid, response = query_wikipedia_title(site, tag_label_normalized) #@UnusedVariable
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   225
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   226
    # We save the datas
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   227
    if new_label is not None:
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   228
        tag.label = new_label
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   229
    if status is not None:
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   230
        tag.url_status = status
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   231
    if url is not None:
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   232
        tag.wikipedia_url = url
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   233
        tag.wikipedia_activated = True
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   234
    if pageid is not None:
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   235
        tag.wikipedia_pageid = pageid
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   236
    tag.save()
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   237
    # We put the tag at the bottom of the datasheet's tag list 
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   238
    # if the tag is created or if the tag is not in the list
29
d12f11960bb6 correct tag creation
ymh <ymh.work@gmail.com>
parents: 28
diff changeset
   239
    ds = Datasheet.objects.get(id=ds_id)
28
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   240
    list_ts = TaggedSheet.objects.filter(datasheet=ds)
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   241
    if created or len(list_ts.filter(tag=tag))==0 :
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   242
        new_order = list_ts.aggregate(Max('order'))['order__max'] + 1
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   243
        ts = TaggedSheet.objects.create(datasheet=ds, tag=tag, original_order=new_order, order=new_order)
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   244
        ts.save()
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   245
    
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   246
    return get_tag_table(request=request, ds_id=ds_id, valid=0)
2cc86e8db2ec commit after merge.
cavaliet
parents: 27
diff changeset
   247