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 |
|