def create(request): """ Create a huddle. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): hud_request = Huddle.from_create_form(form.cleaned_data) try: hud_response = hud_request.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) if request.POST.get('invite'): ids = [int(x) for x in request.POST.get('invite').split(',')] Huddle.invite(request.get_host(), hud_response.id, ids, request.access_token) if request.POST.get('firstcomment') and len(request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'huddle', 'itemId': hud_response.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0 } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict(grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], } ) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 3MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect(reverse('single-huddle', args=(hud_response.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': if request.GET.get('to'): recipients = [] list_of_recipient_ids = request.GET.get('to').split(",") for recipient_id in list_of_recipient_ids: try: recipient_profile = Profile.retrieve(request.get_host(), recipient_id) except APIException: # Skip this recipient, but don't return as we may be able to load the others. continue recipients.append({ 'id': recipient_profile.id, 'profileName': recipient_profile.profile_name, 'avatar': recipient_profile.avatar }) view_data['recipients_json'] = json.dumps(recipients) view_data['form'] = create_form(initial=dict()) return render(request, form_template, view_data)
def create(request): """ Create a huddle. """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = create_form(request.POST) if form.is_valid(): hud_request = Huddle.from_create_form(form.cleaned_data) try: hud_response = hud_request.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) if request.POST.get('invite'): ids = [int(x) for x in request.POST.get('invite').split(',')] Huddle.invite(request.get_host(), hud_response.id, ids, request.access_token) if request.POST.get('firstcomment') and len(request.POST.get('firstcomment')) > 0: payload = { 'itemType': 'huddle', 'itemId': hud_response.id, 'markdown': request.POST.get('firstcomment'), 'inReplyTo': 0 } comment_req = Comment.from_create_form(payload) try: comment = comment_req.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) try: process_attachments(request, comment) except ValidationError: responses = response_list_to_dict(grequests.map(request.view_requests)) comment_form = CommentForm( initial={ 'itemId': comment.item_id, 'itemType': comment.item_type, 'comment_id': comment.id, 'markdown': request.POST['markdown'], } ) view_data = { 'user': Profile(responses[request.whoami_url], summary=False), 'site': Site(responses[request.site_url]), 'content': comment, 'comment_form': comment_form, 'error': 'Sorry, one of your files was over 3MB. Please try again.', } return render(request, form_template, view_data) return HttpResponseRedirect(reverse('single-huddle', args=(hud_response.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': if request.GET.get('to'): recipients = [] list_of_recipient_ids = request.GET.get('to').split(",") for recipient_id in list_of_recipient_ids: try: recipient_profile = Profile.retrieve(request.get_host(), recipient_id) except APIException: # Skip this recipient, but don't return as we may be able to load the others. continue recipients.append({ 'id': recipient_profile.id, 'profileName': recipient_profile.profile_name, 'avatar': recipient_profile.avatar }) view_data['recipients_json'] = json.dumps(recipients) view_data['form'] = create_form(initial=dict()) return render(request, form_template, view_data)
def edit(request, profile_id): """ Edit a user profile (profile name or avatar). """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) user = Profile(responses[request.whoami_url], summary=False) view_data = { 'user': user, 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = edit_form(request.POST) if form.is_valid(): # Upload new avatar if present. if request.FILES.has_key('avatar'): file_request = FileMetadata.from_create_form(request.FILES['avatar']) file_metadata = file_request.create(request.get_host(), request.access_token, 100, 100) try: Attachment.create(request.get_host(), file_metadata.file_hash, profile_id=user.id, access_token=request.access_token, file_name=request.FILES['avatar'].name) except APIException as exc: return respond_with_error(request, exc) # Update the actual profile resource. profile_request = Profile(form.cleaned_data) profile_response = profile_request.update(request.get_host(), request.access_token) # Create, update or delete comment on profile (single comment acts as a bio). if request.POST.has_key('markdown'): profile_comment = { 'itemType': 'profile', 'itemId': profile_response.id, 'markdown': request.POST['markdown'], 'inReplyTo': 0 } # If profile already has an attached comment update it, otherwise create a new one. if hasattr(profile_response, 'profile_comment'): profile_comment['id'] = profile_response.profile_comment.id comment_request = Comment.from_edit_form(profile_comment) try: if profile_comment['markdown']: comment_request.update(request.get_host(), access_token=request.access_token) else: # If the comment body is empty, assume the user wants to delete it. comment_request.delete(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) else: if profile_comment['markdown']: comment = Comment.from_create_form(profile_comment) try: comment.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) return HttpResponseRedirect(reverse('single-profile', args=(profile_response.id,))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': try: user_profile = Profile.retrieve(request.get_host(), profile_id, request.access_token) except APIException as exc: return respond_with_error(request, exc) view_data['form'] = edit_form(user_profile.as_dict) return render(request, form_template, view_data)
def edit(request, profile_id): """ Edit a user profile (profile name or avatar). """ try: responses = response_list_to_dict(grequests.map(request.view_requests)) except APIException as exc: return respond_with_error(request, exc) user = Profile(responses[request.whoami_url], summary=False) view_data = { 'user': user, 'site': Site(responses[request.site_url]), } if request.method == 'POST': form = edit_form(request.POST) if form.is_valid(): # Upload new avatar if present. if request.FILES.has_key('avatar'): file_request = FileMetadata.from_create_form( request.FILES['avatar']) file_metadata = file_request.create(request.get_host(), request.access_token, 100, 100) try: Attachment.create(request.get_host(), file_metadata.file_hash, profile_id=user.id, access_token=request.access_token, file_name=request.FILES['avatar'].name) except APIException as exc: return respond_with_error(request, exc) # Update the actual profile resource. profile_request = Profile(form.cleaned_data) profile_response = profile_request.update(request.get_host(), request.access_token) # Create, update or delete comment on profile (single comment acts as a bio). if request.POST.has_key('markdown'): profile_comment = { 'itemType': 'profile', 'itemId': profile_response.id, 'markdown': request.POST['markdown'], 'inReplyTo': 0 } # If profile already has an attached comment update it, otherwise create a new one. if hasattr(profile_response, 'profile_comment'): profile_comment['id'] = profile_response.profile_comment.id comment_request = Comment.from_edit_form(profile_comment) try: if profile_comment['markdown']: comment_request.update( request.get_host(), access_token=request.access_token) else: # If the comment body is empty, assume the user wants to delete it. comment_request.delete(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) else: if profile_comment['markdown']: comment = Comment.from_create_form(profile_comment) try: comment.create(request.get_host(), request.access_token) except APIException as exc: return respond_with_error(request, exc) return HttpResponseRedirect( reverse('single-profile', args=(profile_response.id, ))) else: view_data['form'] = form return render(request, form_template, view_data) if request.method == 'GET': try: user_profile = Profile.retrieve(request.get_host(), profile_id, request.access_token) except APIException as exc: return respond_with_error(request, exc) view_data['form'] = edit_form(user_profile.as_dict) return render(request, form_template, view_data)