diff -r 6575b9f53601 -r f469ab22542d src/hdalab/views/profile.py --- 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