src/hdalab/views/profile.py
changeset 299 8e00641076e7
parent 297 0a742e5a25aa
child 300 108fd2717177
--- a/src/hdalab/views/profile.py	Fri Jul 18 13:29:53 2014 +0200
+++ b/src/hdalab/views/profile.py	Mon Jul 21 16:07:00 2014 +0200
@@ -5,12 +5,22 @@
 @author: tc
 '''
 from datetime import datetime
-from django.conf import settings
+from django.db.models import Q
+from django.http import HttpResponse
+from django.shortcuts import get_object_or_404
+from django.views.decorators.csrf import csrf_exempt
 from django.views.generic import TemplateView
-from hdalab.models.renkan import Renkan
+from hdabo.models import Tag
+from hdalab.views.ajax import filter_generic
+from renkanmanager.models import Renkan
+from renkanmanager.utils import LineNodePlacer
+from renkanmanager.views import RenkanGetPut
+import json
 import uuid
 
+
 import logging
+from hdalab.models.renkan import HdalabRenkan
 logger = logging.getLogger(__name__)
 
 
@@ -21,24 +31,169 @@
     def get_context_data(self, **kwargs):
         context = super(ProfileHome, self).get_context_data(**kwargs)
         
-#        now = datetime.utcnow().isoformat()
-         
+#         now = datetime.utcnow().isoformat()
+#         
 #         rk = Renkan()
 #         rk.rk_id = unicode(uuid.uuid1())
 #         rk.owner = self.request.user
 #         rk.content = '{"parrot":"dead"}'
 #         rk.title = now
 #         rk.save()
+#         hr = HdalabRenkan()
+#         hr.renkan = rk
+#         from random import randrange
+#         hr.state = randrange(4) + 1
+#         hr.save()
         
-        context['renkan_list'] = Renkan.objects.filter(owner=self.request.user).order_by("-modification_date")
+        
+        context['renkan_list'] = HdalabRenkan.objects.filter(renkan__owner=self.request.user).order_by("-renkan__modification_date")
         
-        #now = datetime.utcnow()
-        #context['renkan_list'] = [
-        #    {"id":"a", "title":"title Renkan 1", "modification_date":now, "thumbnail":"http://icons.iconarchive.com/icons/visualpharm/ios7v2/256/Charts-Mind-map-icon.png"}, 
-        #    {"id":"b", "title":"2 title Renkan 2", "modification_date":now, "thumbnail":"http://a5.mzstatic.com/us/r30/Purple4/v4/ec/6f/d1/ec6fd10f-f295-eed7-d94f-3d9da39efc64/icon_256.png"}
-        #]
+        return context
+
+
+
+class RenkanEdit(TemplateView):
+    
+    template_name="renkan_edit.html"
+    
+    def get_context_data(self, **kwargs):
+        context = super(RenkanEdit, self).get_context_data(**kwargs)
+        # If a renkan id is set
+        rk_id = self.request.GET.get("rk_id", "")
+        if rk_id!="":
+            rk = get_object_or_404(Renkan, rk_id=rk_id)
+            if rk.owner!=self.request.user:
+                raise Exception("You are not allowed to edit this renkan")
         
         return context
 
+
+
+class HdalabRenkanGetPut(RenkanGetPut):
+    
+    @csrf_exempt
+    def dispatch(self, *args, **kwargs):
+        return super(HdalabRenkanGetPut, self).dispatch(*args, **kwargs)
+    
+    def get(self, request):
         
+        # If a renkan id is set
+        rk_id = request.GET.get("rk_id", "")
+        if rk_id!="":
+            rk = get_object_or_404(Renkan, rk_id=rk_id)
+            return HttpResponse(rk.content, content_type="application/json")
+        
+        # Otherwise we build the datas    
+        now = datetime.now().strftime("%Y-%m-%d %H:%M")
+        
+        content = {
+          "id": unicode(uuid.uuid1()),
+          "title": "Renkan généré " + now,
+          "description": "(empty description)",
+          "created": now,
+          "updated": now,
+          "nodes": [],
+          "edges": [],
+          "views": [],
+          "users": [],
+        }
+        
+        # Get tags and countries
+        labels = request.GET.get("label", "").split(",")
+        countries = request.GET.get("country", "").split(",")
+        # Tags arrive with french label, countries with dbpedia uri
+        label_list = [t for t in labels if t!=""]
+        country_list = [c for c in countries if c!=""]
+        all_tags = Tag.objects.filter( Q(label__in=label_list) | Q(dbpedia_uri__in=country_list) ).select_related("dbpedia_fields")
+        
+        # Get datasheets from ajax filter search
+        filter_output = filter_generic(request.GET.get('lang',request.LANGUAGE_CODE), None, ",".join(label_list), ",".join(country_list))
+        filter_output = json.loads(filter_output)
+        #logger.debug("COUCOU")
+        #logger.debug(json.dumps(filter_output, indent=2))
+        #return HttpResponse(json.dumps(filter_output, indent=2), content_type="application/json")
+        
+        # Prepare other tags
+        related_tags = []
+        all_labels = [t.label for t in all_tags]
+        related_tags_dict = {}
+        for c in filter_output["contents"]:
+            c["id"] = unicode(uuid.uuid1())
+            related_tags_dict[c["id"]] = []
+            for t in c["tags"]:
+                if t["label"] not in all_labels and t["order"]<6:
+                    thumbnail_url = ""
+                    for tt in filter_output["tags"]:
+                        if tt["label"]==t["label"]:
+                            thumbnail_url = tt["thumbnail"]
+                    related_tags.append({"label": t["label"], "thumbnail":thumbnail_url, "id":t["id"]})
+                    all_labels.append(t["label"])
+                    related_tags_dict[c["id"]].append(t["id"])
+        #return HttpResponse(json.dumps({"t":related_tags_label}, indent=2), content_type="application/json")
+        
+        # Prepare Node placer :
+        np = LineNodePlacer()
+        np.init({"tags": (1, len(all_tags)), "datasheet": (2, len(filter_output["contents"])), "related": (3, len(related_tags))})
+        
+        project_id = unicode(uuid.uuid1())
+        
+        for t in all_tags:
+            content["nodes"].append({
+              "id": unicode(uuid.uuid1()),
+              "title": t.label,
+              "description": t.dbpedia_uri,
+              "uri": t.dbpedia_uri,
+              "position": np.get_place("tags"),
+              "image": t.dbpedia_fields.thumbnail if hasattr(t, 'dbpedia_fields') and t.dbpedia_fields and t.dbpedia_fields.thumbnail else None,
+              "size": 0,
+              "project_id": project_id,
+              "color": None,
+              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
+            })
+        
+        for c in filter_output["contents"]:
+            content["nodes"].append({
+              "id": c["id"],
+              "title": c["title"],
+              "description": c["description"],
+              "uri": c["url"],
+              "position": np.get_place("datasheet"),
+              "image": None,
+              "size": 0,
+              "project_id": project_id,
+              "color": "#FF0033",
+              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
+            })
+        
+        for t in related_tags:
+            content["nodes"].append({
+              "id": t["id"],
+              "title": t["label"],
+              "description": "",
+              "uri": "",
+              "position": np.get_place("related"),
+              "image": t["thumbnail"],
+              "size": 0,
+              "project_id": project_id,
+              "color": "#00FF33",
+              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
+            })
+        
+        for c_id in related_tags_dict:
+            for tag_id in related_tags_dict[c_id]:
+                content["edges"].append({
+                    "id": unicode(uuid.uuid1()),
+                    "title": "",
+                    "description": "",
+                    "uri": "",
+                    "color": None,
+                    "from": c_id,
+                    "to": tag_id,
+                    "project_id": project_id,
+                    #"created_by": "de68xf75y6hs5rgjhgghxbm217xk"
+                })
+        
+        return HttpResponse(json.dumps(content), content_type="application/json")
+
+
     
\ No newline at end of file