From e357598b8f62524c3c9c2f4008c4c0fba035c2db Mon Sep 17 00:00:00 2001 From: Leif Johansson Date: Tue, 10 May 2011 15:53:46 +0200 Subject: tagging --- src/meetingtools/apps/room/views.py | 46 +++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) (limited to 'src/meetingtools/apps/room/views.py') diff --git a/src/meetingtools/apps/room/views.py b/src/meetingtools/apps/room/views.py index 81ce1dc..201509e 100644 --- a/src/meetingtools/apps/room/views.py +++ b/src/meetingtools/apps/room/views.py @@ -6,7 +6,7 @@ Created on Jan 31, 2011 from meetingtools.apps.room.models import Room, ACCluster from meetingtools.multiresponse import respond_to, redirect_to from meetingtools.apps.room.forms import DeleteRoomForm,\ - CreateRoomForm, ModifyRoomForm + CreateRoomForm, ModifyRoomForm, TagRoomForm from django.shortcuts import get_object_or_404 from meetingtools.ac import ac_api_client, api import re @@ -22,6 +22,7 @@ from django.http import HttpResponseRedirect from django.core.exceptions import ObjectDoesNotExist from django_co_acls.models import allow, deny, acl, clear_acl from meetingtools.ac.api import ACPClient +from tagging.models import Tag, TaggedItem def _acc_for_user(user): (local,domain) = user.username.split('@') @@ -348,4 +349,45 @@ def goto(request,room): return user_client.redirect_to(room.acc.url+urlpath) else: return HttpResponseRedirect(room.acc.url+urlpath) - \ No newline at end of file + +## Tagging + +@login_required +def list_by_tag(request,tn): + tags = tn.split('+') + rooms = TaggedItem.objects.get_by_model(Room, tags) + + +def _can_tag(request,tag): + if tag in ('selfcleaning','public','private'): + return False,"'%s' is reserved" % tag + # XXX implement access model for tags here soon + return True,"" + +@login_required +def untag(request,rid,tag): + room = get_object_or_404(Room,pk=rid) + new_tags = [] + for t in Tag.objects.get_for_object(room): + if t.name != tag: + new_tags.append(t.name) + + Tag.objects.update_tags(room, ' '.join(new_tags)) + return redirect_to("/room/%d/tag" % room.id) + +@login_required +def tag(request,rid): + room = get_object_or_404(Room,pk=rid) + if request.method == 'POST': + form = TagRoomForm(request.POST) + if form.is_valid(): + tag = form.cleaned_data['tag'] + ok,reason = _can_tag(request,tag) + if ok: + Tag.objects.add_tag(room, tag) + else: + form._errors['tag'] = form.error_class([u'%s ... please choose another tag!' % reason]) + else: + form = TagRoomForm() + + return respond_to(request, {'text/html': "apps/room/tag.html"}, {'form': form,'formtitle': 'Add Tag','submitname': 'Add Tag','room': room, 'tags': Tag.objects.get_for_object(room)}) \ No newline at end of file -- cgit v1.1