src/hdalab/views/profile.py
changeset 473 f469ab22542d
parent 458 604b887e70c3
child 490 97afeb38e259
--- a/src/hdalab/views/profile.py	Tue Mar 03 14:03:38 2015 +0100
+++ b/src/hdalab/views/profile.py	Wed Mar 04 15:24:23 2015 +0100
@@ -6,6 +6,14 @@
 '''
 
 from datetime import datetime
+import json
+import logging
+from renkanmanager.models import Renkan
+from renkanmanager.utils import LineNodePlacer, HorLineNodePlacer, renkan_copier, renkan_deleter, \
+    CircleNodePlacer
+from renkanmanager.views import RenkanGetPut
+import uuid
+
 from django.conf import settings
 from django.contrib.auth import REDIRECT_FIELD_NAME, login as auth_login
 from django.contrib.auth.forms import AuthenticationForm
@@ -26,22 +34,15 @@
 from django.views.decorators.csrf import csrf_exempt, csrf_protect
 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.forms import HdalabRenkanStateForm, HdalabRenkanFavoriteForm
 from hdalab.models.dataviz import DbpediaFieldsTranslation
 from hdalab.models.renkan import HdalabRenkan
+from hdalab.services import change_renkan_state
 from hdalab.views.ajax import filter_generic
-from renkanmanager.models import Renkan
-from renkanmanager.utils import LineNodePlacer, HorLineNodePlacer, renkan_copier, renkan_deleter,\
-    CircleNodePlacer
-from renkanmanager.views import RenkanGetPut
-import json
-import uuid
 
-import logging
-from django.views.generic.edit import ModelFormMixin
-from hdalab.forms import HdalabRenkanStateForm
-from django.contrib.admin.models import CHANGE
-from hdalab.services import change_renkan_state
+
 logger = logging.getLogger(__name__)
 
 
@@ -75,19 +76,23 @@
         if filter_enddate!="":
             renkan_queryset = renkan_queryset.filter(renkan__modification_date__lt=filter_enddate + " 23:59:59")
             filters += "&enddate=" + filter_enddate
-        
-        
+        filter_favorite = int(self.request.GET.get('favorite', "2"))
+        if filter_favorite == 1:
+            renkan_queryset = renkan_queryset.filter(favorite=True)
+        elif filter_favorite == 0:
+            renkan_queryset = renkan_queryset.filter(favorite=False)
+
         sort_param = self.request.GET.get('sort', "date")
         order_param = self.request.GET.get('order', "desc")
-        sort = {"date":"renkan__modification_date", "title":"renkan__title", "state":"state", "user":"renkan__owner__username"}.get(sort_param)
+        sort = {"date":"renkan__modification_date", "title":"renkan__title", "state":"state", "user":"renkan__owner__username", "favorite":"favorite"}.get(sort_param, None)
         if order_param=="desc":
             order = "-"
             opposite = "asc"
         else:
             order = ""
             opposite = "desc"
-        
-        renkan_queryset = renkan_queryset.order_by(order + sort)
+        if sort:
+            renkan_queryset = renkan_queryset.order_by(order + sort)
         p = Paginator(renkan_queryset, settings.RENKANS_PER_PAGE)
         page_nb = self.request.GET.get('page')
         try:
@@ -99,7 +104,7 @@
         
         context.update({"page": page, "sort_param":sort_param, "order_param":order_param, "opposite":opposite, 
                         "filters":filters, "title": filter_title, "username": filter_username, "state": filter_state,
-                        "startdate":filter_startdate, "enddate":filter_enddate})
+                        "startdate":filter_startdate, "enddate":filter_enddate, "favorite": filter_favorite})
         
         return context
 
@@ -121,11 +126,19 @@
         return self.update_context( super(RenkanPublicList, self).get_context_data(**kwargs), HdalabRenkan.objects.select_related("renkan", "renkan__owner").filter(state=HdalabRenkan.PUBLISHED) )
 
 
-#TODO  transform in post
+class RenkanFavoriteList(BaseRenkanList):
+    
+    template_name = "renkan_list.html"
+    
+    def get_context_data(self, **kwargs):
+        context = super(BaseRenkanList, self).get_context_data(**kwargs)
+        context['hide_favorite'] = True
+        return self.update_context(context , HdalabRenkan.objects.select_related("renkan", "renkan__owner").filter(state=HdalabRenkan.PUBLISHED, favorite=True) )
+
+
 class RenkanNew(View):
     
-    def get(self, request):
-        
+    def post(self, request):
         rk = Renkan()
         rk_id = unicode(uuid.uuid1())
         rk.rk_id = rk_id
@@ -140,7 +153,6 @@
         return redirect("%s?rk_id=%s" % (reverse('renkan_edit'), rk_id))
 
 
-
 class RenkanEdit(TemplateView):
     
     template_name="renkan_edit.html"
@@ -648,13 +660,13 @@
         return redirect(reverse('profile_home'))
 
 
-class HdalabRenkanModerate(View, ModelFormMixin):
+class HdalabRenkanModerate(View):
     
     def post(self, request, rk_id):
         form = HdalabRenkanStateForm(request.POST)
         if form.is_valid():
             logger.debug("FORM DATA %r", form.cleaned_data)
-            renkan_hda =  get_object_or_404(HdalabRenkan, renkan__rk_id=rk_id)
+            renkan_hda =  get_object_or_404(HdalabRenkan.objects.select_related(), renkan__rk_id=rk_id)
             change_renkan_state(renkan_hda, form.cleaned_data['state'], form.cleaned_data['message'], request.user)
             next_url = form.cleaned_data.get('next', None)
             if next_url:
@@ -665,6 +677,18 @@
             logger.debug("FORM INVALID %r : %r", request.POST, form.errors)
             return HttpResponseBadRequest("State form invalid")
 
+class HdalabRenkanFavorite(View):
+    
+    def post(self, request, rk_id):
+        form = HdalabRenkanFavoriteForm(request.POST)
+        if form.is_valid():
+            renkan_hda =  get_object_or_404(HdalabRenkan.objects.select_related(), renkan__rk_id=rk_id)
+            renkan_hda.favorite = form.cleaned_data['favorite']
+            renkan_hda.save()
+            return HttpResponse(
+                json.dumps({'status': 'ok', 'renkan': {'rk_id': renkan_hda.renkan.rk_id, 'favorite': renkan_hda.favorite}}),
+                content_type="application/json"
+            )
 
 
 # Function copied from django.contrib.auth.views to simplify ajax login
@@ -707,4 +731,3 @@
         context.update(extra_context)
     return TemplateResponse(request, template_name, context,
                             current_app=current_app)
-    
\ No newline at end of file