src/ldt/ldt/ldt_utils/views.py
changeset 276 ee792e43b36a
parent 274 80375a7b7e14
child 278 d16ec14aaf29
equal deleted inserted replaced
275:a14509d74e13 276:ee792e43b36a
  1283                                'is_gecko': is_gecko, 'group_id': grp.id},
  1283                                'is_gecko': is_gecko, 'group_id': grp.id},
  1284                               context_instance=RequestContext(request))
  1284                               context_instance=RequestContext(request))
  1285 
  1285 
  1286 @login_required
  1286 @login_required
  1287 def create_group(request):
  1287 def create_group(request):
  1288     if not request.user.is_regular:
  1288     if not request.user.has_perm('auth.add_group'):
  1289         return HttpResponseServerError('<h1>User can not leave a group.</h1>')
  1289         return HttpResponseServerError('<h1>User %s can not create a group.</h1>' % request.user.username)
       
  1290     
  1290     query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
  1291     query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
  1291     user_list = User.objects.exclude(query)[0:20]
  1292     user_list = User.objects.exclude(query)[0:20]
  1292     user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
  1293     user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
  1293     form_status = ''
  1294     form_status = ''
  1294     
  1295     
  1300             members_list = form.cleaned_data['read_list']
  1301             members_list = form.cleaned_data['read_list']
  1301             admin_list = form.cleaned_data['write_list']            
  1302             admin_list = form.cleaned_data['write_list']            
  1302             
  1303             
  1303             group = Group.objects.create(name=name)
  1304             group = Group.objects.create(name=name)
  1304             group.save()
  1305             group.save()
       
  1306             assign('is_owner_group', request.user, group)
  1305             assign('change_group', request.user, group)
  1307             assign('change_group', request.user, group)
  1306             request.user.groups.add(group)             
  1308             request.user.groups.add(group)             
  1307 
  1309 
  1308             for elem in members_list:
  1310             for elem in members_list:
  1309                 if hasattr(elem, 'username'):
  1311                 if hasattr(elem, 'username'):
  1318     
  1320     
  1319     return render_to_response("ldt/ldt_utils/create_group.html", {'form' : form, 'form_status' : form_status, 'elem_list' : user_list}, context_instance=RequestContext(request))
  1321     return render_to_response("ldt/ldt_utils/create_group.html", {'form' : form, 'form_status' : form_status, 'elem_list' : user_list}, context_instance=RequestContext(request))
  1320 
  1322 
  1321 @login_required
  1323 @login_required
  1322 def update_group(request, group_id):
  1324 def update_group(request, group_id):
  1323     if not request.user.is_regular:
       
  1324         return HttpResponseServerError('<h1>User can not update a group.</h1>')
       
  1325     
       
  1326     group = get_object_or_404(Group, id=group_id)
  1325     group = get_object_or_404(Group, id=group_id)
  1327       
  1326     checker = ObjectPermissionChecker(request.user)
  1328     if not request.user.has_perm('change_group', group):
  1327     
       
  1328     if not checker.has_perm('change_group', group):
  1329         form_status = 'saved'
  1329         form_status = 'saved'
  1330         return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request))
  1330         return render_to_response("ldt/ldt_utils/create_group.html", {'form_status' : form_status}, context_instance=RequestContext(request))
  1331 
  1331 
  1332     query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
  1332     query = Q(id=settings.ANONYMOUS_USER_ID) | Q(id=request.user.id) | Q(is_superuser=True)
  1333     user_list = User.objects.exclude(query)[0:20]
  1333     user_list = User.objects.exclude(query)[0:20]
  1334     user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
  1334     user_list = [{'name': x.username, 'id': x.id, 'type': 'user'} for x in user_list]
  1335     form_status = ''     
  1335     form_status = ''
       
  1336     is_owner_group = checker.has_perm('is_owner_group', group)     
  1336             
  1337             
  1337     if request.method == "POST":
  1338     if request.method == "POST":
  1338         form = GroupAddForm(request.POST, instance=group)
  1339         form = GroupAddForm(request.POST, instance=group)
  1339         submit_action = request.REQUEST.get("submit_button", False)
  1340         submit_action = request.REQUEST.get("submit_button", False)
  1340         
  1341         
  1341         if submit_action == 'delete':
  1342         if submit_action == 'delete':
  1342             remove_perm('change_group', request.user, group)
  1343             if is_owner_group:
  1343             group.delete()
  1344                 group.delete()
  1344             form_status = 'deleted'
  1345                 form_status = 'deleted'
  1345         else:            
  1346         else:   
  1346             if form.is_valid():
  1347             if form.is_valid():
  1347                 name = form.cleaned_data['name']
  1348                 name = form.cleaned_data['name']
  1348                 new_member_list = form.cleaned_data['read_list']
  1349                 new_member_list = form.cleaned_data['read_list']
  1349                 old_member_list = group.user_set.exclude(id=request.user.id)
  1350                 old_member_list = group.user_set.exclude(id=request.user.id)
  1350                 admin_list = form.cleaned_data['write_list']
  1351                 admin_list = form.cleaned_data['write_list']
  1353                 for user in new_member_list:
  1354                 for user in new_member_list:
  1354                     if not hasattr(user, 'username'):
  1355                     if not hasattr(user, 'username'):
  1355                         raise AttributeError('new_member_list should only contain users')
  1356                         raise AttributeError('new_member_list should only contain users')
  1356                     if user != request.user:                      
  1357                     if user != request.user:                      
  1357                         group.user_set.add(user)
  1358                         group.user_set.add(user)
  1358                         if user in admin_list:
  1359                         if is_owner_group:
  1359                             assign('change_group', user, group)
  1360                             if user in admin_list:
  1360                         else:
  1361                                 assign('change_group', user, group)
  1361                             remove_perm('change_group', user, group)
  1362                             else:
  1362                         
  1363                                 remove_perm('change_group', user, group)
       
  1364                                 
  1363                 for user in old_member_list:
  1365                 for user in old_member_list:
  1364                     if user not in new_member_list:
  1366                     if user not in new_member_list:
  1365                         group.user_set.remove(user)
  1367                         group.user_set.remove(user)
  1366                         remove_perm('change_group', user, group)
  1368                         remove_perm('change_group', user, group)
  1367                                         
  1369                                         
  1371     else:
  1373     else:
  1372         form = GroupAddForm(initial={'name':unicode(group.name)})    
  1374         form = GroupAddForm(initial={'name':unicode(group.name)})    
  1373 
  1375 
  1374     member_list, admin_list = get_userlist_group(group, request.user)
  1376     member_list, admin_list = get_userlist_group(group, request.user)
  1375     return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status,
  1377     return render_to_response("ldt/ldt_utils/create_group.html", {'group_id' : group_id, 'form' : form, 'form_status' : form_status,
  1376                                                                   'elem_list' : user_list, 'member_list': member_list, 'admin_list': admin_list},
  1378                                                                   'elem_list' : user_list, 'member_list': member_list, 'admin_list': admin_list,
  1377                                                                   context_instance=RequestContext(request))
  1379                                                                   'is_owner_group': is_owner_group}, context_instance=RequestContext(request))
  1378 
  1380 
  1379 @login_required
       
  1380 def leave_group(request, group_id, redirect=True):
       
  1381     if not request.user.is_regular:
       
  1382         return HttpResponseServerError('<h1>User can not leave a group.</h1>')
       
  1383     
       
  1384     group = get_object_or_404(Group, id=group_id)
       
  1385     redirect = boolean_convert(redirect)
       
  1386     
       
  1387     if not request.user.has_perm('change_group', group):
       
  1388         request.user.groups.remove(group)
       
  1389         
       
  1390     if redirect:        
       
  1391         return HttpResponseRedirect(reverse('ldt.ldt_utils.views.groups'))
       
  1392     else:
       
  1393         return HttpResponse(simplejson.dumps({'res':True}, ensure_ascii=False), mimetype='application/json')
       
  1394          
       
  1395