# HG changeset patch # User ymh # Date 1310119387 -7200 # Node ID ba8ebabbaece0eb52dd0050246e6df7842105ac5 # Parent c86fa4a358d73117233706927a1810925301ed22 -correct css and display - add action to sort tags : bug #16 - correct text sort -correct text encoding #3 diff -r c86fa4a358d7 -r ba8ebabbaece .hgignore --- a/.hgignore Fri Jul 08 03:23:20 2011 +0200 +++ b/.hgignore Fri Jul 08 12:03:07 2011 +0200 @@ -16,4 +16,6 @@ ^web/index/.*$ syntax: regexp -^virtualenv/res/src/south$ \ No newline at end of file +^virtualenv/res/src/south$ +syntax: regexp +\.sh$ \ No newline at end of file diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/fixtures/datasheet_10.yaml.bz2 Binary file web/hdabo/fixtures/datasheet_10.yaml.bz2 has changed diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/fixtures/datasheet_347.yaml.bz2 Binary file web/hdabo/fixtures/datasheet_347.yaml.bz2 has changed diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/fixtures/datasheet_all.yaml.bz2 Binary file web/hdabo/fixtures/datasheet_all.yaml.bz2 has changed diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/management/commands/import_csv.py --- a/web/hdabo/management/commands/import_csv.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/management/commands/import_csv.py Fri Jul 08 12:03:07 2011 +0200 @@ -193,6 +193,7 @@ if tag_obj is None: tag_obj = Tag(label=tag_label, original_label=tag) + tag_obj.save() tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1) tagged_ds.save() diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/management/commands/order_tags.py --- a/web/hdabo/management/commands/order_tags.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/management/commands/order_tags.py Fri Jul 08 12:03:07 2011 +0200 @@ -6,13 +6,12 @@ from django.core.management.base import NoArgsCommand from django.core.management.color import no_style -from haystack.constants import DJANGO_ID -from haystack.query import SearchQuerySet +from django.db import transaction from hdabo.models import Datasheet +from hdabo.wp_utils import reorder_datasheet_tags +from optparse import make_option import math import sys -from optparse import make_option -from django.db import transaction class Command(NoArgsCommand): @@ -31,6 +30,11 @@ dest='force', default=False, help='force reordering of all datasheets'), + make_option('--noinput', + action='store_true', + dest='no_input', + default=False, + help='no input'), ) @@ -53,7 +57,7 @@ self.style = no_style() - interactive = options.get('interactive', True) + interactive = options.get('interactive', True) and not options.get('no_input', False) force = options.get('force', True) if interactive: @@ -80,21 +84,7 @@ try: for i, ds in enumerate(queryset): self.show_progress(i + 1, total, 60) - ts_list = [] - for ts in ds.taggedsheet_set.all(): - kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)} - results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs) - if len(results) > 0: - ts.index_note = results[0].score - ts.save() - ts_list.append(ts) - ts_list.sort(key=lambda t: (-t.index_note, t.order)) - for k, ts in enumerate(ts_list): - ts.order = k + 1 - ts.save() - if ds.manual_order: - ds.manual_order = False - ds.save() + reorder_datasheet_tags(ds) transaction.commit() except: transaction.rollback() diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/models.py --- a/web/hdabo/models.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/models.py Fri Jul 08 12:03:07 2011 +0200 @@ -4,7 +4,7 @@ from django.contrib.auth.models import User from django.db import models from hdabo.fields import SortedManyToManyField -from hdabo.utils import Property +from hdabo.utils import Property, normalize import datetime class Organisation(models.Model): @@ -94,6 +94,7 @@ } label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True) + normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False) original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False) alias = models.CharField(max_length=1024, unique=False, blank=True, null=True) category = models.ForeignKey(TagCategory, null=True, blank=True) @@ -108,7 +109,11 @@ def fget(self): return self.TAG_URL_STATUS_CHOICES[self.url_status][1] - return locals() + return locals() + + def save(self, *args, **kwargs): + self.normalized_label = normalize(self.label) + super(Tag, self).save(*args,**kwargs) class Location(models.Model): name = models.CharField(max_length=512, unique=False, blank=False, null=False) diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/static/hdabo/css/style.css --- a/web/hdabo/static/hdabo/css/style.css Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/static/hdabo/css/style.css Fri Jul 08 12:03:07 2011 +0200 @@ -390,3 +390,6 @@ font-weight: bold; } +#tags_actions span { + margin-left: 5px +} diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/static/hdabo/img/sort-descending.png Binary file web/hdabo/static/hdabo/img/sort-descending.png has changed diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/static/hdabo/js/hdabo.js --- a/web/hdabo/static/hdabo/js/hdabo.js Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/static/hdabo/js/hdabo.js Fri Jul 08 12:03:07 2011 +0200 @@ -195,7 +195,12 @@ add_tag($("#wp_search").val()); } }); - + $("#tags_sort").click(function(e){ + e.preventDefault(); + if(confirm("Confirmez-vous le tri des tags ?")) { + reorder_tags(); + } + }); // Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id" $("#validated").click(function(e){ e.preventDefault(); @@ -317,3 +322,28 @@ } }); } + +function reorder_tags() { + $('#tags_sort').attr("disabled", "disabled"); + var tag_sort_old_src = $("#tags_sort").attr("src"); + $("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif"); + $.ajax({ + url: reorder_tag_datasheet_url, + type: 'POST', + data: { + csrfmiddlewaretoken:global_csrf_token, + datasheet_id:$('#datasheet_id').val() + }, + success: function(msg, textStatus, XMLHttpRequest) { + $('#tag_table_container').html(msg); + init_tags_events(); + // And scroll to the bottom + $("html").animate({ scrollTop: $(document).height() }, 500); + }, + complete: function(){ + $("#tags_sort").attr("src",tag_sort_old_src); + $('#tags_sort').removeAttr("disabled"); + } + }); +} + diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/templates/generic_sheet.html --- a/web/hdabo/templates/generic_sheet.html Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/templates/generic_sheet.html Fri Jul 08 12:03:07 2011 +0200 @@ -19,6 +19,7 @@ var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}"; var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}"; var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}"; + var reorder_tag_datasheet_url = "{% url hdabo.views.reorder_tag_datasheet %}"; var add_tag_url = "{% url hdabo.views.add_tag %}"; var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}"; var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}"; diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/templates/partial/one_sheet.html --- a/web/hdabo/templates/partial/one_sheet.html Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/templates/partial/one_sheet.html Fri Jul 08 12:03:07 2011 +0200 @@ -19,18 +19,23 @@ {#

original_modification_date
{{ds.original_modification_date|date:"d/m/Y"}}

#}
-

En cours - Validé - {% if ds.validated %} - par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}} - {% endif %} - {% if valid != "2" %} - Ajouter un tag : OK - {% endif %} -

- {% csrf_token %} - -
+
+
En cours + Validé + {% if ds.validated %} + par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}} + {% endif %} +
+ {% if valid != "2" %} +
+ Trier les tags : + Ajouter un tag : OK +
+ {% endif %} + {% csrf_token %} + +
+
{% include "partial/tag_table.html" %}
diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/urls.py --- a/web/hdabo/urls.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/urls.py Fri Jul 08 12:03:07 2011 +0200 @@ -42,4 +42,5 @@ url(r'^validatedatasheet/(?P[\w-]+)/(?P[\w-]+)/$', 'hdabo.views.validate_datasheet'), url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'), url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'), + url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'), ) diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/utils.py --- a/web/hdabo/utils.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/utils.py Fri Jul 08 12:03:07 2011 +0200 @@ -343,3 +343,6 @@ def remove_accents(str): nkfd_form = unicodedata.normalize('NFKD', unicode(str)) return u"".join([c for c in nkfd_form if not unicodedata.combining(c)]) + +def normalize(str): + return remove_accents(str).lower() diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/views.py --- a/web/hdabo/views.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/views.py Fri Jul 08 12:03:07 2011 +0200 @@ -11,16 +11,15 @@ from django.utils.http import urlquote from haystack.constants import DJANGO_ID from haystack.query import SearchQuerySet -from hdabo.utils import OrderedDict, remove_accents +from hdabo.utils import OrderedDict, remove_accents, normalize from hdabo.wp_utils import (normalize_tag, query_wikipedia_title, - get_or_create_tag, process_tag) + get_or_create_tag, process_tag, reorder_datasheet_tags) from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet from wikitools import wiki import django.utils.simplejson as json import re - @login_required def home(request): @@ -203,7 +202,7 @@ cursor = connection.cursor() #@UndefinedVariable fl_list = [] try: - cursor.execute("select upper(substring(label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;") + cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;") for row in cursor: new_char = remove_accents(row[0]) @@ -282,12 +281,11 @@ base_queryset = Tag.objects if searched and searched != "" : - searched = searched.strip() + searched = normalize(searched.strip()) regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER),".*")) - base_queryset = base_queryset.filter(label__iregex=regex) + base_queryset = base_queryset.filter(normalized_label__iregex=regex) - alltags = base_queryset.annotate(num_ds=Count('datasheet')).order_by('-popularity','-num_ds','label') - #alltags = alltags.order_by('-popularity','label') + alltags = base_queryset.annotate(num_ds=Count('datasheet')).order_by('-popularity','-num_ds','normalized_label', 'label') # We build the paginator for the requested list if nb_by_page : @@ -553,4 +551,11 @@ else : return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"]) - +@login_required +def reorder_tag_datasheet(request): + + ds_id = request.REQUEST['datasheet_id'] + ds = Datasheet.objects.get(hda_id=ds_id) + reorder_datasheet_tags(ds) + + return get_tag_table(request=request, ds_id=ds_id, valid=0) diff -r c86fa4a358d7 -r ba8ebabbaece web/hdabo/wp_utils.py --- a/web/hdabo/wp_utils.py Fri Jul 08 03:23:20 2011 +0200 +++ b/web/hdabo/wp_utils.py Fri Jul 08 12:03:07 2011 +0200 @@ -1,8 +1,11 @@ # -*- coding: utf-8 -*- from django.conf import settings +from django.utils.http import urlquote +from haystack.constants import DJANGO_ID +from haystack.query import SearchQuerySet from hdabo.models import Tag, TaggedSheet from wikitools import api, wiki -from django.utils.http import urlquote + def normalize_tag(tag): if len(tag) == 0: @@ -14,7 +17,7 @@ return tag def urlize_for_wikipedia(label): - return urlquote(label.replace(" ","_")) + return urlquote(label.replace(" ", "_")) def __is_homonymie(page_dict): @@ -36,7 +39,7 @@ response = wpquery.query() original_response = response def return_null_result(): - return { 'new_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'dbpedia_uri': None, 'revision_id': None,'response': response } + return { 'new_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response } query_dict = response['query'] @@ -164,6 +167,23 @@ if prev_wikipedia_pageid != pageid: TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id) - + + +def reorder_datasheet_tags(ds): + ts_list = [] + for ts in ds.taggedsheet_set.all(): + kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)} + results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs) + if len(results) > 0: + ts.index_note = results[0].score + ts.save() + ts_list.append(ts) + ts_list.sort(key=lambda t: (-t.index_note, t.order)) + for k, ts in enumerate(ts_list): + ts.order = k + 1 + ts.save() + if ds.manual_order: + ds.manual_order = False + ds.save()