def add_member(request): kwargs = simplejson.loads(request.raw_post_data) gr_name = kwargs['group_name'] user_name = kwargs['user_name'] is_adm = kwargs['is_admin'] gr = request.user.wappy_groups.get(name=gr_name) if not request.user.memberships.get(group=gr).is_admin: return json_http_response({'error': 'Only an admin can add members!', 'result': None}) try: usr = User.objects.get(username=user_name) except User.DoesNotExist: response_dict = {'error': 'User does not exist!', 'result': None} return json_http_response(response_dict) try: gr = request.user.wappy_groups.get(name=gr_name) if Membership.objects.filter(user=usr, group=gr).count() > 0: response_dict = {'error': 'User is already a member!', 'result': None} return json_http_response(response_dict) mship = Membership(user=usr, group=gr, is_admin=is_adm) mship.save() timestamp = get_timestamp(mship.join_date.timetuple()) member = {'name': user_name, 'email': usr.email, 'is_admin': mship.is_admin, 'is_owner': mship.is_owner, 'join_date': timestamp} response_dict = {'error': None, 'result': member} except: response_dict = unkown_error_dict() return json_http_response(response_dict)
def test_membership(self): membership = Membership() user = User.objects.create_user("Testy McTest", "*****@*****.**", "testpassword") user.save() group = Group() group.name = "Test Group" group.save() membership.user = User.objects.get(id=user.id) membership.group = Group.objects.get(id=group.id) membership.is_admin = False membership.save() test_membership = Membership.objects.get(id=membership.id) self.assertEquals(test_membership, membership) self.assertEquals(test_membership.user, User.objects.get(id=user.id)) self.assertEquals(test_membership.group, Group.objects.get(id=group.id)) self.assertEquals(test_membership.is_admin, False) membership.delete() group.delete() user.delete()
def confirm_email_invite(request, key): ''' Confirms an email invite to a specific user. This may or may not redirect to a form for creating the new user (with first name, last name, and password). ''' key = key.lower() user = EmailInvite.objects.confirm_email(key) if user is not None: # Handle the user case. if not user.is_active: ''' This may not be the best idea, but if the user is not active, then activate them anyway, since this is just another link they'll have to follow if they haven't already. ''' user.is_active = True # Check to see if they're already in the group, as this might not be the # first time they've visited this link. invite = EmailInvite.objects.get(confirmation_key=key) group = invite.group if not group.members.all().filter(email=user.email): # change invite to show that user accepted #invite.acceptance = 'A' #invite.save() invite.delete() # membership = Membership(user=user, group=group) membership.save() group.membership_set.add(membership) # user is now a member! params = { 'group': group, 'user': user, } return render(request, 'invite_complete.html', params) else: # Handle the non-existing user case. recipient_email = EmailInvite.objects.get_email(key) if recipient_email is not None: # The email is not none, so now we need to create a user. # Redirect them to the form page for finishing their account. # # If they choose that they are an existing user, simply verify # their credentials and then add them to the group, redirecting # them to the inbox. return redirect('/invite_registration/{0}'.format(key)) else: return render(request, 'email_invite_error.html')
def invite_registration(request, key): ''' Registers the user based on an their invitation. ''' # If the email for this key doesn't exist, or there is a user already with # the email, then whoever is here is here for the wrong reason. We'll (for # now) just give them a 404. email = EmailInvite.objects.get_email(key) if email is None: raise Http404 try: user = User.objects.get(email=email) except User.DoesNotExist: user = None if user is not None: raise Http404 # If we're here, we have a user's email, which will be used for creating the # user. if request.method == 'POST': form = InviteRegistrationForm(request.POST) if form.is_valid(): ''' If the form is all good and such, then send the user off to the page that'll say something like 'yay, you're registered with Bulletin!' ''' user = form.save(email) invite = EmailInvite.objects.get(confirmation_key=key) # change invite to show that user accepted #invite.acceptance = 'A' #invite.save() invite.delete() # group = invite.group membership = Membership(user=user, group=group) membership.save() group.membership_set.add(membership) group.save() params = { 'group': group, 'user': user, } return render(request, 'invite_complete.html', params) else: form = InviteRegistrationForm() ctx = {'form': form, 'action': '/invite_registration/{0}/'.format(key)} return render(request, 'register.html', ctx)
def test_post(self): post = Post() user = User.objects.create_user('Testy McTest', '*****@*****.**', 'testpassword') user.save() group = Group() group.name = "Test Group" group.save() membership = Membership() membership.user = User.objects.get(id = user.id) membership.group = Group.objects.get(id = group.id) membership.save() post.author = Membership.objects.get(id = membership.id) post.message = "Testing321" post.save() test_post = Post.objects.get(id = post.id) self.assertEquals(test_post, post) self.assertEquals(test_post.author, Membership.objects.get(id = membership.id)) self.assertEquals(test_post.message, "Testing321") post.delete() membership.delete() group.delete() user.delete()
def create_group(request): kwargs = simplejson.loads(request.raw_post_data) gr_name = kwargs['name'] is_pub = kwargs['is_public'] reqs_allowed = kwargs['requests_allowed'] existing_group = Group.objects.filter(name=gr_name) if existing_group.count() == 0: try: gr = Group(name=gr_name, is_public=is_pub, requests_allowed=reqs_allowed) gr.save() mship = Membership(user=request.user, group=gr, is_owner=True, is_admin=True) mship.save() response_dict = {'error': None, 'result': 'Group created!'} except: response_dict = unkown_error_dict() else: response_dict = {'error': 'Group name already exists!', 'result': None} return json_http_response(response_dict)
def save_group(request): if not request.is_ajax(): return False else: # print(request.POST) data = json.loads(request.POST['data']) #print(data['members']) #members = ast.literal_eval(data['members'][1]) #print(type(members)) #print(members['member_id']) # Check whether the group exists: try: group = get_object_or_404(Group, id=data['group_id']) print(group) except: return HttpResponse('no such group') # Iterate over the membership array for datum in data['members']: import ast members = ast.literal_eval(datum) member_id = members['member_id'] group_status = members['status'] print('>> Member {}: {}'.format(member_id,group_status)) if group_status != None or group_status != 'member': # Check whether the member exists: try: print('Finding member {}'.format(member_id)) member = get_object_or_404(Member, id=member_id) print('member {} found'.format(member)) except: print('member not found') return HttpResponse('no such member') # If we need to add the member... if group_status == 'add-member': print('>>> Add member!') try: membership = get_object_or_404(Membership, member=member, group=group) return HttpResponse('member already exists') except: print('>> Create membership object!') membership = Membership(member=member, group=group) try: print('>> Clean and save membership object!') membership.clean() membership.save() except: return HttpResponse('unable to save membership') # If we need to remove the member... elif group_status == 'remove-member': print('>>> Remove member!') try: membership = get_object_or_404(Membership, member=member, group=group) except: print('>> No membership to remove. We\'re done!') try: membership.delete() except: return HttpResponse('unable to delete membership') elif group_status == 'member': print('already a member...') else: print('unknown group_status:') print(group_status) # All is done. Return a successful response to the template. :-) return HttpResponse(json.dumps({ 'type': 'success' }))
def save_group(request): if not request.is_ajax(): return False else: # print request.POST data = json.loads(request.POST['data']) #print data['members'] #members = ast.literal_eval(data['members'][1]) #print type(members) #print members['member_id'] # Check whether the group exists: try: group = get_object_or_404(Group, id=data['group_id']) print group except: return HttpResponse('no such group') # Iterate over the membership array for datum in data['members']: import ast members = ast.literal_eval(datum) member_id = members['member_id'] group_status = members['status'] print '>> Member {}: {}'.format(member_id,group_status) if group_status != None or group_status != 'member': # Check whether the member exists: try: print 'Finding member {}'.format(member_id) member = get_object_or_404(Member, id=member_id) print 'member {} found'.format(member) except: print 'member not found' return HttpResponse('no such member') # If we need to add the member... if group_status == 'add-member': print '>>> Add member!' try: membership = get_object_or_404(Membership, member=member, group=group) return HttpResponse('member already exists') except: print '>> Create membership object!' membership = Membership(member=member, group=group) try: print '>> Clean and save membership object!' membership.clean() membership.save() except: return HttpResponse('unable to save membership') # If we need to remove the member... elif group_status == 'remove-member': print '>>> Remove member!' try: membership = get_object_or_404(Membership, member=member, group=group) except: print '>> No membership to remove. We\'re done!' try: membership.delete() except: return HttpResponse('unable to delete membership') elif group_status == 'member': print 'already a member...' else: print 'unknown group_status:' print group_status # All is done. Return a successful response to the template. :-) return HttpResponse(json.dumps({ 'type': 'success' }))
def perform_create(self, serializer): membership = Membership(**serializer.validated_data) group_id = self.kwargs['pk'] membership.group = Group.objects.get(pk=group_id) membership.save() return MembershipSerializer(membership)