Revision 0dadf7b2 pithos/im/views.py

b/pithos/im/views.py
34 34
import json
35 35
import logging
36 36
import socket
37
import csv
37 38

  
38 39
from datetime import datetime
39 40
from functools import wraps
......
138 139
                            page=page,
139 140
                            prev=prev,
140 141
                            next=next)
141
    
142
@requires_admin
143
def users_create(request):
144
    if request.method == 'GET':
145
        return render_response('users_create.html')
146
    if request.method == 'POST':
147
        user = User()
148
        user.uniq = request.POST.get('uniq')
149
        user.realname = request.POST.get('realname')
150
        user.is_admin = True if request.POST.get('admin') else False
151
        user.affiliation = request.POST.get('affiliation')
152
        user.quota = int(request.POST.get('quota') or 0) * (1024 ** 3)  # In GiB
153
        user.renew_token()
154
        user.save()
155
        return redirect(users_info, user.id)
156 142

  
157 143
@requires_admin
158 144
def users_info(request, user_id):
......
366 352
                'status': status,
367 353
                'message': message})
368 354
        return HttpResponse(html)
355

  
356
@requires_admin
357
def invitations_list(request):
358
    invitations = Invitation.objects.order_by('id')
359
    
360
    filter = request.GET.get('filter', '')
361
    if filter:
362
        if filter.startswith('-'):
363
            invitations = invitations.exclude(uniq__icontains=filter[1:])
364
        else:
365
            invitations = invitations.filter(uniq__icontains=filter)
366
    
367
    try:
368
        page = int(request.GET.get('page', 1))
369
    except ValueError:
370
        page = 1
371
    offset = max(0, page - 1) * settings.ADMIN_PAGE_LIMIT
372
    limit = offset + settings.ADMIN_PAGE_LIMIT
373
    
374
    npages = int(ceil(1.0 * invitations.count() / settings.ADMIN_PAGE_LIMIT))
375
    prev = page - 1 if page > 1 else None
376
    next = page + 1 if page < npages else None
377
    return render_response('invitations_list.html',
378
                            invitations=invitations[offset:limit],
379
                            filter=filter,
380
                            pages=range(1, npages + 1),
381
                            page=page,
382
                            prev=prev,
383
                            next=next)
384

  
385
@requires_admin
386
def invitations_export(request):
387
    # Create the HttpResponse object with the appropriate CSV header.
388
    response = HttpResponse(mimetype='text/csv')
389
    response['Content-Disposition'] = 'attachment; filename=invitations.csv'
390

  
391
    writer = csv.writer(response)
392
    writer.writerow(['ID',
393
      'Uniq',
394
      'Real Name',
395
      'Code',
396
      'Inviter Uniq',
397
      'Inviter Real Name',
398
      'Is_accepted',
399
      'Created',
400
      'Accepted',])
401
    invitations = Invitation.objects.order_by('id')
402
    for inv in invitations:
403
        writer.writerow([inv.id,
404
      inv.uniq,
405
      inv.realname.encode("utf-8"),
406
      inv.code,
407
      inv.inviter.uniq,
408
      inv.inviter.realname.encode("utf-8"),
409
      inv.is_accepted,
410
      inv.created,
411
      inv.accepted,
412
      ])
413

  
414
    return response
415

  
416
@requires_admin
417
def users_create(request):
418
    if request.method == 'GET':
419
        return render_response('users_create.html')
420
    if request.method == 'POST':
421
        user = User()
422
        user.uniq = request.POST.get('uniq')
423
        user.realname = request.POST.get('realname')
424
        user.is_admin = True if request.POST.get('admin') else False
425
        user.affiliation = request.POST.get('affiliation')
426
        user.quota = int(request.POST.get('quota') or 0) * (1024 ** 3)  # In GiB
427
        user.renew_token()
428
        user.save()
429
        return redirect(users_info, user.id)

Also available in: Unified diff