--- 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