diff -r 8234cb238783 -r 8e00641076e7 src/hdalab/views/profile.py --- 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