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 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 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 tagged_minutes_api(request): form = StatCaledarForm(request.GET) # convenient way to parse dates if not form.is_valid(): return HttpResponseBadRequest() tags = filter(lambda x: bool(x), form.cleaned_data['tags'].strip().split("+")) sco = form.cleaned_data['sco'] begin = form.cleaned_data['begin'] end = form.cleaned_data['end'] user = form.cleaned_data['user'] qs = UserMeetingTransaction.objects if user: qs = qs.filter(user=user) if sco: qs = qs.filter(sco=sco) if begin: qs = qs.filter(date_created__gt=begin) if end: qs = qs.filter(date_closed__lt=end) if len(tags) > 0: qs = UserMeetingTransaction.tagged.with_all(tags,qs) series = [] d_created = None d_closed = None ms = 0 curdate = None t_ms = 0 rc = {} uc = {} for tx in qs.all().prefetch_related("sco").prefetch_related("user"): rc[tx.sco.id] = True uc[tx.user.username] = True ts_created = _dt2ts(tx.date_created) ts_closed = _dt2ts(tx.date_closed) d1 = tx.date_created if d_created is None: d_created = d1 d2 = tx.date_closed if d_closed is None: d_closed = d2 if curdate is None: curdate = d1 if curdate != d1: series.append([_dt2ts(curdate),int(ms/60)]) ms = 0 curdate = d1 if d1 == d2: #same date diff = (ts_closed - ts_created) ms += diff t_ms += diff else: # meeting spanned midnight ts_date_ts = _dt2ts(d2) ms += ts_date_ts - ts_created series.append([_dt2ts(d1),int(ms/60)]) t_ms += ms curdate = d2 ms = (ts_closed - ts_date_ts) if curdate is not None and ms > 0: series.append([_date_ts(curdate),int(ms/60)]) return json_response({'data': sorted(series,key=lambda x: x[0]), 'rooms': len(rc.keys()), 'begin': naturalday(begin), 'end': naturalday(end), 'users': len(uc.keys()), 'minutes': int(t_ms/60)},request)