src/hdalab/views/profile.py
changeset 320 6b7694a282d9
parent 319 fef4317b915f
child 321 36f8550fdcc7
--- a/src/hdalab/views/profile.py	Tue Aug 26 18:11:26 2014 +0200
+++ b/src/hdalab/views/profile.py	Wed Aug 27 13:11:28 2014 +0200
@@ -5,7 +5,6 @@
 @author: tc
 '''
 
-
 from datetime import datetime
 from django.conf import settings
 from django.contrib.auth import REDIRECT_FIELD_NAME, login as auth_login
@@ -25,6 +24,7 @@
 from django.views.decorators.debug import sensitive_post_parameters
 from django.views.generic import TemplateView, View
 from hdabo.models import Tag, Datasheet, TaggedSheet, Folder
+from hdalab.models.dataviz import DbpediaFields, DbpediaFieldsTranslation
 from hdalab.models.renkan import HdalabRenkan
 from hdalab.views.ajax import filter_generic
 from renkanmanager.models import Renkan
@@ -35,7 +35,6 @@
 import uuid
 
 
-
 import logging
 logger = logging.getLogger(__name__)
 
@@ -117,6 +116,8 @@
             return HttpResponse(rk.content, content_type="application/json")
         
         shape = request.GET.get("shape", "")
+        no_translate_langs = [ 'fr' ]
+        lang = request.GET.get('lang',request.LANGUAGE_CODE)
         
         # Start dict for renkan json
         now = datetime.now().strftime("%Y-%m-%d %H:%M")
@@ -149,7 +150,7 @@
         notice_id = request.GET.get("notice", "")
         if notice_id!="":
             notice = get_object_or_404(Datasheet, hda_id=notice_id)
-            # We get the ORDERED tags if we display one sheet (case valid = 0 and 1)
+            # We get the ORDERED tags if we display one sheet
             ordered_tags = TaggedSheet.objects.filter(datasheet=notice).select_related("tag", "tag__dbpedia_fields", "tag__category").order_by('order')[:15]
             # Prepare Node placer :
             np = LineNodePlacer()
@@ -170,6 +171,13 @@
                 #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
             })
             
+            # Get translated labels
+            dbpediafields = dict([(df.tag_id, df) for df in DbpediaFields.objects.filter(tag__in = [ot.tag for ot in ordered_tags])])
+            translations = {}
+            if lang not in no_translate_langs:
+                transqs = DbpediaFieldsTranslation.objects.filter(master__in = dbpediafields.values(), language_code = lang)
+                translations = dict([(trans.master_id,trans.label) for trans in transqs])
+            
             for ot in ordered_tags:
                 t = ot.tag
                 img_url = t.dbpedia_fields.thumbnail if hasattr(t, 'dbpedia_fields') and t.dbpedia_fields and t.dbpedia_fields.thumbnail else None
@@ -178,7 +186,7 @@
                 
                 content["nodes"].append({
                   "id": unicode(uuid.uuid1()),
-                  "title": t.label + ((" (" + t.category.label + ")") if t.category else ""),
+                  "title": translations.get(dbpediafields[t.id].id, t.label),
                   "description": t.dbpedia_uri,
                   "uri": t.dbpedia_uri,
                   "position": np.get_place("tags"),
@@ -212,6 +220,12 @@
             n_tags = [t.pk for t in n_tags]
             all_tags = Tag.objects.filter( pk__in=n_tags ).select_related("dbpedia_fields", "category")
             
+            # Get translated labels
+            translations = {}
+            if lang not in no_translate_langs:
+                transqs = DbpediaFieldsTranslation.objects.filter(master__in = [t.dbpedia_fields if hasattr(t, 'dbpedia_fields') and t.dbpedia_fields else None for t in all_tags], language_code = lang)
+                translations = dict([(trans.master_id,trans.label) for trans in transqs])
+            
             # Prepare Node placer :
             np = LineNodePlacer()
             if shape=="circle":
@@ -240,7 +254,7 @@
                     img_url = cat_dict[t.category.label]
                 content["nodes"].append({
                   "id": tag_uuid_dict[t.pk],
-                  "title": t.label + ((" (" + t.category.label + ")") if t.category else ""),
+                  "title": translations.get(t.dbpedia_fields.id, t.label) if hasattr(t, 'dbpedia_fields') and t.dbpedia_fields else t.label,
                   "description": t.dbpedia_uri,
                   "uri": t.dbpedia_uri,
                   "position": np.get_place("tags"),
@@ -281,7 +295,7 @@
         
         
         # Get datasheets from ajax filter search
-        filter_output = filter_generic(request.GET.get('lang',request.LANGUAGE_CODE), None, ",".join(label_list), ",".join(country_list), content_count=10)
+        filter_output = filter_generic(lang, None, ",".join(label_list), ",".join(country_list), content_count=10)
         filter_output = json.loads(filter_output)
         #logger.debug("COUCOU")
         #logger.debug(json.dumps(filter_output, indent=2))
@@ -336,7 +350,7 @@
             
             content["nodes"].append({
               "id": unicode(uuid.uuid1()),
-              "title": t.label + ((" (" + t.category.label + ")") if t.category else ""),
+              "title": filter_output["tagtranslations"][t.label],
               "description": t.dbpedia_uri,
               "uri": t.dbpedia_uri,
               "position": np.get_place("tags"),
@@ -364,7 +378,7 @@
         for t in related_tags:
             content["nodes"].append({
               "id": t["id"],
-              "title": t["label"],
+              "title": filter_output["tagtranslations"][t["label"]],
               "description": "",
               "uri": "",
               "position": np.get_place("related"),