def tag(request, rid): room = get_object_or_404(Room, pk=rid) if request.method == 'POST': form = TagRoomForm(request.POST) if form.is_valid(): for tag in re.split('[,\s]+', form.cleaned_data['tag']): tag = tag.strip() 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() tags = Tag.objects.get_for_object(room) tn = "+".join([t.name for t in tags]) return respond_to(request, {'text/html': "apps/room/tag.html"}, {'form': form, 'formtitle': 'Add Tag', 'cancelurl': '/rooms#%d' % room.id, 'cancelname': 'Done', 'submitname': 'Add Tag', 'room': room, 'tagstring': tn, 'tags': tags})
def create(request): acc = acc_for_user(request.user) my_meetings_sco = get_sco(acc, _user_meeting_folder(request, acc)) template_sco_id = acc.default_template_sco_id if not template_sco_id: template_sco_id = settings.DEFAULT_TEMPLATE_SCO room = Room(creator=request.user, folder_sco=my_meetings_sco, source_sco=get_sco(acc, template_sco_id)) what = "Create" title = "Create a new room" if request.method == 'POST': form = CreateRoomForm(request.POST, instance=room) _init_update_form(request, form, acc, my_meetings_sco) if form.is_valid(): _update_room(request, room, form.cleaned_data) room = form.save() return redirect_to("/rooms#%d" % room.id) else: form = CreateRoomForm(instance=room) _init_update_form(request, form, acc, my_meetings_sco) return respond_to(request, {'text/html': 'apps/room/create.html'}, {'form': form, 'formtitle': title, 'cancelurl': '/rooms', 'cancelname': 'Cancel', 'submitname': '%s Room' % what})
def _goto(request, room, clean=True, promote=False): if room.is_locked(): return respond_to(request, {"text/html": "apps/room/retry.html"}, {'room': room, 'wait': 10}) now = time.time() lastvisit = room.lastvisit() room.lastvisited = datetime.now() with ac_api_client(room.sco.acc) as api: api.poll_user_counts(room) if clean: # don't clean the room unless you get a good status code from the call to the usermanager api above if room.self_cleaning and room.user_count == 0: if (room.user_count == 0) and (abs(lastvisit - now) > settings.GRACE): room.lock("Locked for cleaning") try: room = _clean(request, room) finally: room.unlock() if room.host_count == 0 and room.allow_host: return respond_to(request, {"text/html": "apps/room/launch.html"}, {'room': room}) else: room.save() key = None if request.user.is_authenticated() and room.sco.acc.cross_domain_sso: key = _random_key(20) user_principal = api.find_user(request.user.username) principal_id = user_principal.get('principal-id') with ac_api_client(room.sco.acc) as api: api.request("user-update-pwd", {"user-id": principal_id, 'password': key, 'password-verify': key}, True) if promote and room.self_cleaning: if user_principal: api.request('permissions-update', {'acl-id': room.sco.sco_id, 'principal-id': user_principal.get('principal-id'), 'permission-id': 'host'}, True) r = api.request('sco-info', {'sco-id': room.sco.sco_id}, True) urlpath = r.et.findtext('.//sco/url-path') start_user_counts_poll(room, 10) if key: try: user_client = ACPClient(room.sco.acc.api_url, request.user.username, key, cache=False) return user_client.redirect_to(room.sco.acc.url + urlpath) except Exception, e: pass
def occupation(request, rid): room = get_object_or_404(Room, pk=rid) with ac_api_client(room.sco.acc) as api: api.poll_user_counts(room) d = {'nusers': room.user_count, 'nhosts': room.host_count} return respond_to(request, {'text/html': 'apps/room/fragments/occupation.txt', 'application/json': json_response(d, request)}, d)
def cluster(request, cluster_name=None): if not request.user.is_staff: return HttpResponseForbidden() clusters = ACCluster.objects.all().values('name') if cluster_name: acc = get_object_or_404(ACCluster, name=cluster_name) domains = cache.get('%s-domains' % acc) total_bytecount = cache.get('%s-bytecount' % acc) if not domains or not total_bytecount: domains, total_bytecount = tasks.get_cluster_content(acc) return respond_to(request, {'text/html': 'apps/content/cluster.html'}, {'clusters': clusters, 'cluster_name': cluster_name, 'domains': domains, 'total_bytecount': total_bytecount}) return respond_to(request, {'text/html': 'apps/content/cluster.html'}, {'clusters': clusters})
def view(request, id): room = get_object_or_404(Room, pk=id) return respond_to(request, {'text/html': 'apps/room/list.html'}, {'user': request.user, 'rooms': [room], 'title': room.name, 'baseurl': base_url(request), 'active': True, })
def go_by_path(request, path): rooms = Room.objects.filter(urlpath=path) if len(rooms) == 1: return goto(request, rooms[0]) if len(rooms) == 0: return HttpResponseNotFound() return respond_to(request, {'text/html': 'apps/room/choose.html', 'application/json': json_response([base_url(request, room.go_url()) for room in rooms])}, {'rooms': rooms})
def user(request, username=None): if username is None: username = request.user.username content = cache.get('%s-content' % username) total_bytecount = cache.get('%s-bytecount' % username) if not content or total_bytecount: content = Content.objects.filter(creator__username=username) total_bytecount = content.aggregate(Sum('bytecount')) cache.set('%s-content' % username, content, 900) cache.set('%s-bytecount' % username, total_bytecount, 900) return respond_to(request, {'text/html': 'apps/content/user.html'}, {'username': username, 'content': content, 'total_bytecount': total_bytecount})
def domain(request, domain_name): if not request.user.is_staff: return HttpResponseForbidden() domain_tag = get_object_or_404(Tag, name='domain:%s' % domain_name) users = cache.get('%s-users' % domain_tag) total_files = cache.get('%s-files' % domain_tag) total_bytecount = cache.get('%s-bytecount' % domain_tag) if not users or not total_files or not total_bytecount: users, total_files, total_bytecount = tasks.get_domain_content(domain_tag) return respond_to(request, {'text/html': 'apps/content/domain.html'}, {'domain': domain_name, 'total_bytecount': total_bytecount, 'total_files': total_files, 'users': users})
def list_by_tag(request, tn): tags = tn.split('+') rooms = TaggedItem.objects.get_by_model(Room, tags).order_by('name').all().prefetch_related("creator", "sco", "folder_sco", "source_sco", "deleted_sco") title = 'Rooms tagged with %s' % " and ".join(tags) return respond_to(request, {'text/html': 'apps/room/list.html', 'application/json': json_response([_room2dict(request, room) for room in rooms], request)}, {'title': title, 'description': title, 'edit': False, 'active': len(rooms) == 1, 'baseurl': base_url(request), 'tagstring': tn, 'rooms': rooms})
def list_rooms(request, username=None): user = request.user if username: try: user = User.objects.get(username=username) except ObjectDoesNotExist: user = None rooms = [] if user: rooms = Room.objects.filter(creator=user).order_by('name').all().prefetch_related("creator", "sco", "folder_sco", "source_sco", "deleted_sco") return respond_to(request, {'text/html': 'apps/room/list.html'}, {'title': 'Your Rooms', 'edit': True, 'active': len(rooms) == 1, 'rooms': rooms})
def update(request, id): room = get_object_or_404(Room, pk=id) acc = room.sco.acc what = "Update" title = "Modify %s" % room.name if request.method == 'POST': form = ModifyRoomForm(request.POST, instance=room) _init_update_form(request, form, acc, room.folder_sco) if form.is_valid(): _update_room(request, room, form.cleaned_data) room = form.save() return redirect_to("/rooms#%d" % room.id) else: form = ModifyRoomForm(instance=room) _init_update_form(request, form, acc, room.folder_sco) return respond_to(request, {'text/html': 'apps/room/update.html'}, {'form': form, 'formtitle': title, 'cancelurl': '/rooms#%d' % room.id, 'cancelname': 'Cancel', 'submitname': '%s Room' % what})
def delete(request, id): room = get_object_or_404(Room, pk=id) if request.method == 'POST': form = DeleteRoomForm(request.POST) if form.is_valid(): with ac_api_client(room.sco.acc) as api: api.request('sco-delete', {'sco-id': room.sco.sco_id}, raise_error=False) #clear_acl(room) #room.sco.delete() #if room.folder_sco is not None: #room.folder_sco.delete() #if room.deleted_sco is not None: #room.deleted_sco.delete() room.delete() return redirect_to("/rooms") else: form = DeleteRoomForm() return respond_to(request, {'text/html': 'edit.html'}, {'form': form, 'formtitle': 'Delete %s' % room.name, 'cancelurl': '/rooms', 'cancelname': 'Cancel', 'submitname': 'Delete Room'})
def user(request,username=None): if username is None: username = request.user.username (local,domain) = username.split('@') return respond_to(request,{'text/html': 'apps/stats/user.html'},{'domain': domain,'username': username})
def recordings(request, rid): room = get_object_or_404(Room, pk=rid) return respond_to(request, {'text/html': 'apps/room/recordings.html'}, {'recordings': room_recordings(request, room), 'room': room})
def widget(request, tags=None): title = 'Meetingtools jQuery widget' return respond_to(request, {'text/html': 'apps/room/widget.html'}, {'title': title, 'tags': tags})
def room(request,rid): room = get_object_or_404(Room,pk=rid) if not room.creator == request.user: return HttpResponseForbidden("You can only look at statistics for your own rooms!") return respond_to(request,{'text/html': 'apps/stats/room.html'},{'room': room})
def domain(request,domain): (l,d) = request.user.username.split('@') if d != domain: return HttpResponseForbidden("You can only look at statistics for your own domain!") return respond_to(request,{'text/html': 'apps/stats/domain.html'},{'domain': domain})