def edit_participants(request, slug): project = get_object_or_404(Project, slug=slug) if request.method == 'POST': form = project_forms.ProjectAddParticipantForm(project, request.POST) if form.is_valid(): user = form.cleaned_data['user'] organizing = form.cleaned_data['organizer'] participation = Participation(project=project, user=user, organizing=organizing) participation.save() new_rel = Relationship(source=user, target_project=project) try: new_rel.save() except IntegrityError: pass messages.success(request, _('Participant added.')) return http.HttpResponseRedirect( reverse('projects_edit_participants', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding the participant.')) else: form = project_forms.ProjectAddParticipantForm(project) return render_to_response('projects/project_edit_participants.html', { 'project': project, 'form': form, 'participations': project.participants().order_by('joined_on'), 'participants_tab': True, }, context_instance=RequestContext(request))
def delete_restore_comment(request, comment_id): comment = get_object_or_404(PageComment, id=comment_id) if not comment.can_edit( request.user) or not request.user.get_profile().can_post(): if comment.deleted: msg = _('You can not restore this comment.') else: msg = _('You can not delete this comment.') messages.error(request, msg) return http.HttpResponseRedirect(comment.get_absolute_url()) if request.method == 'POST': comment.deleted = not comment.deleted comment.save() if comment.deleted: msg = _('Comment deleted!') else: msg = _('Comment restored!') messages.success(request, msg) if comment.deleted: return http.HttpResponseRedirect( comment.page_object.get_absolute_url()) else: return http.HttpResponseRedirect(comment.get_absolute_url()) else: return render_to_response('replies/delete_restore_comment.html', { 'comment': comment, 'page_object': comment.page_object, 'scope_object': comment.scope_object, }, context_instance=RequestContext(request))
def profile_edit(request): profile = request.user.get_profile() if request.method == 'POST': form = forms.ProfileEditForm(request.POST, request.FILES, instance=profile) if form.is_valid(): olang = get_language() activate(profile.preflang) messages.success(request, _('Profile updated')) form.save() next = reverse('users_profile_edit') next = force_language_in_url(next, olang, profile.preflang) return http.HttpResponseRedirect(next) else: messages.error(request, _('There were problems updating your ' 'profile. Please correct the problems ' 'and submit again.')) else: form = forms.ProfileEditForm(instance=profile) return render_to_response('users/profile_edit_main.html', { 'profile': profile, 'profile_form': form, 'general_tab': True, }, context_instance=RequestContext(request))
def edit_links(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) profile = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectLinksForm(request.POST) if form.is_valid(): link = form.save(commit=False) link.project = project link.user = profile link.save() messages.success(request, _('Link added.')) return http.HttpResponseRedirect( reverse('projects_edit_links', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding your link.')) else: form = project_forms.ProjectLinksForm() links = Link.objects.select_related('subscription').filter(project=project) return render_to_response('projects/project_edit_links.html', { 'project': project, 'form': form, 'links': links, 'links_tab': True, 'can_view_metric_overview': metric_permissions[0], }, context_instance=RequestContext(request))
def create_submission(request, slug): badge = get_object_or_404(Badge, slug=slug) can_apply = badge.is_eligible(request.user) rubrics = badge.rubrics.all() if not can_apply: messages.error(request, _('You are lacking one or more of the requirements.')) # TODO: Reason why return http.HttpResponseRedirect(badge.get_absolute_url()) user = request.user.get_profile() submission = None if request.method == 'POST': form = badge_forms.SubmissionForm(request.POST) if form.is_valid(): submission = form.save(commit=False) submission.badge = badge submission.author = user if 'show_preview' not in request.POST: submission.save() messages.success(request, _('Submission created and out for review!')) return http.HttpResponseRedirect(badge.get_absolute_url()) else: messages.error(request, _('Please correct errors below.')) else: form = badge_forms.SubmissionForm(instance=badge) context = { 'form': form, 'badge': badge, 'rubrics': rubrics, } return render_to_response('badges/submission_edit.html', context, context_instance=RequestContext(request))
def edit_media(request, slug): project = get_object_or_404(Project, slug=slug) files = project.projectmedia_set.all() if request.method == 'POST': if files.count() > settings.MAX_PROJECT_FILES: messages.error(request, _('You have already used up your allotted ' 'number of file uploads. Please delete ' 'some files and try again.')) return http.HttpResponseRedirect( reverse('projects_edit_media', kwargs=dict(slug=project.slug))) form = project_forms.ProjectMediaForm(request.POST, request.FILES) if form.is_valid(): messages.success(request, _('File uploaded')) media = form.save(commit=False) media.project = project media.mime_type = form.cleaned_data['project_file'].content_type media.save() return http.HttpResponseRedirect( reverse('projects_edit_media', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error uploading ' 'your file.')) else: form = project_forms.ProjectMediaForm() return render_to_response('projects/project_edit_media.html', { 'files': files, 'form': form, 'project': project, }, context_instance=RequestContext(request))
def edit_submission_description(request, slug, submission_id): challenge = get_object_or_404(Challenge, slug=slug) submission = get_object_or_404(Submission, pk=submission_id) if request.method == 'POST': form = SubmissionDescriptionForm(request.POST, instance=submission) if form.is_valid(): form.save() messages.success(request, _('Your submission has been edited.')) return HttpResponseRedirect( reverse('submission_show', kwargs={ 'slug': challenge.slug, 'submission_id': submission.pk })) else: messages.error(request, _('Unable to update your submission')) else: form = SubmissionDescriptionForm(instance=submission) ctx = {'challenge': challenge, 'submission': submission, 'form': form} return render_to_response('challenges/submission_edit_description.html', ctx, context_instance=RequestContext(request))
def edit_status(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == 'POST': form = project_forms.ProjectStatusForm( request.POST, instance=project) if form.is_valid(): project = form.save(commit=False) project.set_duration(form.cleaned_data['duration']) project.save() messages.success(request, _('%s updated!') % project.kind.capitalize()) return http.HttpResponseRedirect(reverse('projects_edit_status', kwargs={ 'slug': project.slug, })) else: msg = _('There was a problem saving the %s\'s status.') messages.error(request, msg % project.kind.lower()) else: form = project_forms.ProjectStatusForm(instance=project, initial={'duration': project.get_duration()}) return render_to_response('projects/project_edit_status.html', { 'form': form, 'project': project, 'status_tab': True, 'can_view_metric_overview': metric_permissions, 'is_challenge': (project.category == project.CHALLENGE), }, context_instance=RequestContext(request))
def edit_challenge(request, slug): challenge = get_object_or_404(Challenge, slug=slug) user = request.user.get_profile() if user != challenge.created_by: return HttpResponseForbidden(_("You can't edit challenge")) if request.method == 'POST': form = ChallengeForm(request.POST, instance=challenge) if form.is_valid(): form.save() messages.success(request, _('Challenge updated!')) return HttpResponseRedirect(reverse('challenges_show', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('Unable to update your challenge.')) else: form = ChallengeForm(instance=challenge) context = { 'form': form, 'project': challenge.project, 'challenge': challenge, } return render_to_response('challenges/challenge_edit_summary.html', context, context_instance=RequestContext(request))
def edit_challenge_image(request, slug): challenge = get_object_or_404(Challenge, slug=slug) if request.method == "POST": form = ChallengeImageForm(request.POST, request.FILES, instance=challenge) if form.is_valid(): messages.success(request, _('Challenge image updated')) form.save() return HttpResponseRedirect( reverse('challenges_edit_image', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('There was an error uploading your image')) else: form = ChallengeImageForm(instance=challenge) context = { 'form': form, 'challenge': challenge, } return render_to_response('challenges/challenge_edit_image.html', context, context_instance=RequestContext(request))
def submissions_voter_details(request, submission_id): submission = get_object_or_404(Submission, pk=submission_id) try: voter = VoterDetails.objects.get(user=request.user.get_profile()) except: voter = None if request.method == 'POST': form = VoterDetailsForm(request.POST, instance=voter) if form.is_valid(): details = form.save(commit=False) details.user = request.user.get_profile() details.save() form.save_m2m() messages.success(request, _('Your details were saved.')) return HttpResponseRedirect(reverse('challenges_show', kwargs={ 'slug': submission.challenge.get().slug, })) else: messages.error(request, _('Unable to save details')) else: form = VoterDetailsForm(instance=voter) context = { 'form': form, 'submission': submission, } return render_to_response('challenges/voter_details.html', context, context_instance=RequestContext(request))
def challenge_judges(request, slug): challenge = get_object_or_404(Challenge, slug=slug) if request.method == 'POST': form = JudgeForm(request.POST) if form.is_valid(): judge = form.save(commit=False) judge.challenge = challenge try: judge.save() messages.success(request, _('Judge has been added')) except IntegrityError: messages.error(request, _('User is already a judge')) return HttpResponseRedirect(reverse('challenges_judges', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('Unable to add judge.')) else: form = JudgeForm() judges = Judge.objects.filter(challenge=challenge) context = { 'challenge': challenge, 'form': form, 'judges': judges, } return render_to_response('challenges/challenge_judges.html', context, context_instance=RequestContext(request))
def delete_restore_comment(request, slug, page_slug, comment_id): comment = get_object_or_404(PageComment, id=comment_id, page__slug=page_slug, page__project__slug=slug) if not comment.can_edit(request.user): return http.HttpResponseForbidden(_("You can't edit this comment")) if request.method == 'POST': comment.deleted = not comment.deleted comment.save() if comment.page.slug == 'sign-up' and not comment.reply_to: if comment.deleted: msg = _('Answer deleted!') else: msg = _('Answer restored!') else: if comment.deleted: msg = _('Comment deleted!') else: msg = _('Comment restored!') messages.success(request, msg) if comment.deleted: return http.HttpResponseRedirect(comment.page.get_absolute_url()) else: return http.HttpResponseRedirect(comment.get_absolute_url()) else: return render_to_response('content/delete_restore_comment.html', { 'comment': comment, 'page': comment.page, 'project': comment.page.project, }, context_instance=RequestContext(request))
def delete_restore_signup_answer(request, slug, answer_id): sign_up = get_object_or_404(Signup, project__slug=slug) answer = get_object_or_404(sign_up.answers, id=answer_id) if not answer.can_edit(request.user): if answer.deleted: msg = _('You can not restore this answer.') else: msg = _('You can not delete this answer.') messages.error(request, msg) return http.HttpResponseRedirect(answer.get_absolute_url()) if request.method == 'POST': answer.deleted = not answer.deleted answer.save() if answer.deleted: msg = _('Answer deleted!') else: msg = _('Answer restored!') messages.success(request, msg) if answer.deleted: return http.HttpResponseRedirect( sign_up.get_absolute_url()) else: return http.HttpResponseRedirect(answer.get_absolute_url()) else: return render_to_response('signups/delete_restore_answer.html', { 'answer': answer, 'sign_up': sign_up, 'project': sign_up.project, }, context_instance=RequestContext(request))
def create_challenge(request, project_id): project = get_object_or_404(Project, id=project_id) if project.slug != 'mojo': return HttpResponseForbidden() user = request.user.get_profile() if request.method == 'POST': form = ChallengeForm(request.POST) if form.is_valid(): challenge = form.save(commit=False) challenge.created_by = user challenge.project = project challenge.save() messages.success(request, _('Your new challenge has been created.')) return HttpResponseRedirect( reverse('challenges_show', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('Unable to create your challenge.')) else: form = ChallengeForm() context = { 'form': form, 'project': project, } return render_to_response('challenges/challenge_edit_summary.html', context, context_instance=RequestContext(request))
def settings(request): profile = request.user.get_profile() participations = profile.participations.filter(left_on__isnull=True) if request.method == 'POST': for key in AccountPreferences.preferences: if key in request.POST and request.POST[key] == 'on': AccountPreferences.objects.filter( user=profile, key=key).delete() else: AccountPreferences( user=profile, key=key, value=1).save() for participation in participations: key = 'no_updates_%s' % participation.project.slug if key in request.POST and request.POST[key] == 'on': participation.no_updates = False else: participation.no_updates = True key = 'no_wall_updates_%s' % participation.project.slug if key in request.POST and request.POST[key] == 'on': participation.no_wall_updates = False else: participation.no_wall_updates = True participation.save() messages.success( request, _("Thank you, your settings have been saved.")) return HttpResponseRedirect(reverse('preferences_settings')) preferences = AccountPreferences.objects.filter( user=request.user.get_profile()) prefs = {'domain': Site.objects.get_current().domain, 'participations': participations} for preference in preferences: log.debug("%s => %s" % (preference.key, preference.value)) prefs[preference.key] = preference.value return render_to_response('preferences/settings_notifications.html', prefs, context_instance=RequestContext(request))
def challenge_judges(request, slug): challenge = get_object_or_404(Challenge, slug=slug) if request.method == 'POST': form = JudgeForm(request.POST) if form.is_valid(): judge = form.save(commit=False) judge.challenge = challenge try: judge.save() messages.success(request, _('Judge has been added')) except IntegrityError: messages.error(request, _('User is already a judge')) return HttpResponseRedirect( reverse('challenges_judges', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('Unable to add judge.')) else: form = JudgeForm() judges = Judge.objects.filter(challenge=challenge) context = { 'challenge': challenge, 'form': form, 'judges': judges, } return render_to_response('challenges/challenge_judges.html', context, context_instance=RequestContext(request))
def comment_page(request, slug, page_slug, comment_id=None): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) if not page.editable: return HttpResponseForbidden(_("You can't edit this page")) user = request.user.get_profile() reply_to = abs_reply_to = None if comment_id: reply_to = page.comments.get(pk=comment_id) abs_reply_to = reply_to while abs_reply_to.reply_to: abs_reply_to = abs_reply_to.reply_to if request.method == 'POST': form = CommentForm(request.POST) if form.is_valid(): comment = form.save(commit=False) comment.page = page comment.author = user comment.reply_to = reply_to comment.abs_reply_to = abs_reply_to comment.save() messages.success(request, _('Comment posted!')) return HttpResponseRedirect(comment.get_absolute_url()) else: messages.error(request, _('There was a problem posting the comment. Comments cannot be empty.')) else: form = CommentForm() return render_to_response('content/comment_page.html', { 'form': form, 'project': page.project, 'page': page, 'reply_to': reply_to, }, context_instance=RequestContext(request))
def submissions_voter_details(request, submission_id): submission = get_object_or_404(Submission, pk=submission_id) try: voter = VoterDetails.objects.get(user=request.user.get_profile()) except: voter = None if request.method == 'POST': form = VoterDetailsForm(request.POST, instance=voter) if form.is_valid(): details = form.save(commit=False) details.user = request.user.get_profile() details.save() form.save_m2m() messages.success(request, _('Your details were saved.')) return HttpResponseRedirect( reverse('challenges_show', kwargs={ 'slug': submission.challenge.get().slug, })) else: messages.error(request, _('Unable to save details')) else: form = VoterDetailsForm(instance=voter) context = { 'form': form, 'submission': submission, } return render_to_response('challenges/voter_details.html', context, context_instance=RequestContext(request))
def edit_featured(request, slug): school = get_object_or_404(School, slug=slug) if request.method == 'POST': form = school_forms.SchoolAddFeaturedForm(school, request.POST) if form.is_valid(): project = form.cleaned_data['project'] school.featured.add(project) school.save() msg = _('The %s is now featured for this school.') messages.success(request, msg % project.kind.lower()) return http.HttpResponseRedirect( reverse('schools_edit_featured', kwargs=dict(slug=school.slug))) else: msg = _("There was an error marking %s as featured.") messages.error(request, msg % slug) else: form = school_forms.SchoolAddFeaturedForm(school) return render_to_response('schools/school_edit_featured.html', { 'school': school, 'form': form, 'featured': school.featured.all(), 'featured_tab': True, }, context_instance=RequestContext(request))
def edit_challenge(request, slug): challenge = get_object_or_404(Challenge, slug=slug) user = request.user.get_profile() if user != challenge.created_by: return HttpResponseForbidden() if request.method == 'POST': form = ChallengeForm(request.POST, instance=challenge) if form.is_valid(): form.save() messages.success(request, _('Challenge updated!')) return HttpResponseRedirect( reverse('challenges_show', kwargs={ 'slug': challenge.slug, })) else: messages.error(request, _('Unable to update your challenge.')) else: form = ChallengeForm(instance=challenge) context = { 'form': form, 'project': challenge.project, 'challenge': challenge, } return render_to_response('challenges/challenge_edit_summary.html', context, context_instance=RequestContext(request))
def delete_follower(request, slug): project = get_object_or_404(Project, slug=slug) # TODO should use a proper django form for this? if request.method == 'POST' and 'follower_id' in request.POST: follower_id = int(request.POST['follower_id']) follower = UserProfile.objects.get(id=follower_id) # use filter() instead of get() to return None instead of raise an # error for objects that do not exist. rel = Relationship.objects.filter( source=follower, target_project=project )[0] if project.created_by == follower: messages.error(request, _( "You cannot unfollow your own course" )) elif rel : rel.delete() messages.success(request, _( "The follower %s has been removed." % follower.display_name)) else: messages.error(request, _( "The user is not following this course")) else: messages.error(request, _( "There was an error removing the user.")) return http.HttpResponseRedirect(reverse('projects_edit_followers', kwargs={ 'slug': project.slug, }))
def edit_comment(request, comment_id): comment = get_object_or_404(PageComment, id=comment_id) if not comment.can_edit(request.user): messages.error(request, _('You can not edit this comment.')) return http.HttpResponseRedirect(comment.get_absolute_url()) if request.method == 'POST': form = CommentForm(request.POST, instance=comment) if form.is_valid(): comment = form.save(commit=False) if 'show_preview' not in request.POST: comment.save() messages.success(request, _('Comment updated!')) return http.HttpResponseRedirect(comment.get_absolute_url()) else: messages.error(request, _('Please correct errors below.')) else: form = CommentForm(instance=comment) return render_to_response('replies/comment_page.html', { 'form': form, 'comment': comment, 'page_object': comment.page_object, 'scope_object': comment.scope_object, 'reply_to': comment.reply_to, 'preview': ('show_preview' in request.POST), }, context_instance=RequestContext(request))
def import_from_old_site(request): user = request.user.get_profile() if request.method == 'POST': form = project_forms.ImportProjectForm(request.POST) if form.is_valid(): course = form.cleaned_data['course'] #CS - too much logic in view project = Project(name=course['name'], kind=course['kind'], short_description=course['short_description'], long_description=course['long_description'], imported_from=course['slug']) project.save() act = Activity(actor=user, verb=verbs['post'], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() if course['detailed_description']: detailed_description_content = course['detailed_description'] else: detailed_description_content = render_to_string( "projects/detailed_description_initial_content.html", {'project': project}) detailed_description = Page(title=_('Full Description'), slug='full-description', content=detailed_description_content, listed=False, author_id=user.id, project_id=project.id) detailed_description.save() project.detailed_description_id = detailed_description.id sign_up = Signup(between_participants=course['sign_up'], author_id=user.id, project_id=project.id) sign_up.save() project.save() for title, content in course['tasks']: new_task = Page(title=title, content=content, author=user, project=project) new_task.save() for name, url in course['links']: new_link = Link(name=name, url=url, user=user, project=project) new_link.save() project.create() messages.success(request, _('The %s has been imported.') % project.kind.lower()) return http.HttpResponseRedirect(reverse('projects_show', kwargs={ 'slug': project.slug, })) else: msg = _("Problem importing the study group, course, ...") messages.error(request, msg) else: form = project_forms.ImportProjectForm() return render_to_response('projects/project_import.html', { 'form': form, 'import_tab': True}, context_instance=RequestContext(request))
def edit_participants(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == 'POST': form = project_forms.ProjectAddParticipantForm(project, request.POST) if form.is_valid(): user = form.cleaned_data['user'] organizing = form.cleaned_data['organizer'] participation = Participation(project=project, user=user, organizing=organizing) participation.save() new_rel, created = Relationship.objects.get_or_create( source=user, target_project=project) new_rel.deleted = False new_rel.save() messages.success(request, _('Participant added.')) return http.HttpResponseRedirect(reverse( 'projects_edit_participants', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding the participant.')) else: form = project_forms.ProjectAddParticipantForm(project) return render_to_response('projects/project_edit_participants.html', { 'project': project, 'form': form, 'participations': project.participants().order_by('joined_on'), 'participants_tab': True, 'can_view_metric_overview': metric_permissions[0], 'is_challenge': (project.category == project.CHALLENGE), }, context_instance=RequestContext(request))
def edit_links(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) profile = request.user.get_profile() if request.method == 'POST': form = project_forms.ProjectLinksForm(request.POST) if form.is_valid(): link = form.save(commit=False) link.project = project link.user = profile link.save() messages.success(request, _('Link added.')) return http.HttpResponseRedirect( reverse('projects_edit_links', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding your link.')) else: form = project_forms.ProjectLinksForm() links = Link.objects.select_related('subscription').filter(project=project) return render_to_response('projects/project_edit_links.html', { 'project': project, 'form': form, 'links': links, 'links_tab': True, 'can_view_metric_overview': metric_permissions, }, context_instance=RequestContext(request))
def edit_links_edit(request, slug, link): link = get_object_or_404(Link, id=link) form = project_forms.ProjectLinksForm(request.POST or None, instance=link) profile = get_object_or_404(UserProfile, user=request.user) project = get_object_or_404(Project, slug=slug) if link.project != project: return http.HttpResponseForbidden(_("You can't edit this link")) metric_permissions = project.get_metrics_permissions(request.user) if form.is_valid(): if link.subscription: #UnsubscribeFromFeed.apply_async(args=(link,)) link.subscription = None link.save() link = form.save(commit=False) link.user = profile link.project = project link.save() messages.success(request, _('Link updated.')) return http.HttpResponseRedirect( reverse('projects_edit_links', kwargs=dict(slug=project.slug))) else: form = project_forms.ProjectLinksForm(instance=link) return render_to_response('projects/project_edit_links_edit.html', { 'project': project, 'form': form, 'link': link, 'links_tab': True, 'can_view_metric_overview': metric_permissions, }, context_instance=RequestContext(request))
def edit_answer_sign_up(request, slug, answer_id): sign_up = get_object_or_404(Signup, project__slug=slug) answer = get_object_or_404(sign_up.answers, id=answer_id) if not answer.can_edit(request.user): return http.HttpResponseForbidden(_("You can't edit this answer")) profile = answer.author if request.method == 'POST': form = SignupAnswerForm(request.POST, instance=answer) profile_form = ProfileEditForm(request.POST, instance=profile) profile_image_form = ProfileImageForm() if form.is_valid() and profile_form.is_valid(): profile = profile_form.save(commit=False) answer = form.save(commit=False) if 'show_preview' not in request.POST: profile.save() answer.save() messages.success(request, _('Answer updated!')) return http.HttpResponseRedirect(answer.get_absolute_url()) else: messages.error(request, _('Please correct errors below.')) else: profile_form = ProfileEditForm(instance=profile) profile_image_form = ProfileImageForm() form = SignupAnswerForm(instance=answer) return render_to_response('signups/answer_sign_up.html', { 'profile_image_form': profile_image_form, 'profile_form': profile_form, 'profile': profile, 'form': form, 'project': sign_up.project, 'sign_up': sign_up, 'answer': answer, 'preview': ('show_preview' in request.POST), }, context_instance=RequestContext(request))
def edit_participants(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == 'POST': form = project_forms.ProjectAddParticipantForm(project, request.POST) if form.is_valid(): user = form.cleaned_data['user'] organizing = form.cleaned_data['organizer'] participation = Participation(project=project, user=user, organizing=organizing) participation.save() new_rel, created = Relationship.objects.get_or_create( source=user, target_project=project) new_rel.deleted = False new_rel.save() messages.success(request, _('Participant added.')) return http.HttpResponseRedirect(reverse( 'projects_edit_participants', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding the participant.')) else: form = project_forms.ProjectAddParticipantForm(project) return render_to_response('projects/project_edit_participants.html', { 'project': project, 'form': form, 'participations': project.participants().order_by('joined_on'), 'participants_tab': True, 'can_view_metric_overview': metric_permissions, 'is_challenge': (project.category == project.CHALLENGE), }, context_instance=RequestContext(request))
def edit_participants(request, slug): project = get_object_or_404(Project, slug=slug) if request.method == 'POST': form = project_forms.ProjectAddParticipantForm(project, request.POST) if form.is_valid(): user = form.cleaned_data['user'] participation = Participation(project= project, user=user) participation.save() new_rel = Relationship(source=user, target_project=project) try: new_rel.save() except IntegrityError: pass messages.success(request, _('Participant added.')) return http.HttpResponseRedirect( reverse('projects_edit_participants', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding the participant.')) else: form = project_forms.ProjectAddParticipantForm(project) return render_to_response('projects/project_edit_participants.html', { 'project': project, 'form': form, 'participations': project.participants(), }, context_instance=RequestContext(request))
def edit_next_steps(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == 'POST': form = project_forms.ProjectAddNextProjectForm(project, request.POST) if form.is_valid(): next_project = form.cleaned_data['next_project'] project.next_projects.add(next_project) messages.success(request, _('Next step added.')) return http.HttpResponseRedirect(reverse( 'projects_edit_next_steps', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding that next step.')) else: form = project_forms.ProjectAddNextProjectForm(project) return render_to_response('projects/project_edit_next_steps.html', { 'project': project, 'form': form, 'next_steps': project.next_projects.all(), 'next_steps_tab': True, 'can_view_metric_overview': metric_permissions, 'is_challenge': (project.category == project.CHALLENGE), }, context_instance=RequestContext(request))
def create_page(request, slug): project = get_object_or_404(Project, slug=slug) if project.is_organizing(request.user): form_cls = OwnersPageForm else: form_cls = PageForm if request.method == 'POST': form = form_cls(request.POST) if form.is_valid(): page = form.save(commit=False) page.project = project page.author = request.user.get_profile() page.save() messages.success(request, _('Task created!')) return HttpResponseRedirect(reverse('page_show', kwargs={ 'slug': slug, 'page_slug': page.slug, })) else: messages.error(request, _('There was a problem creating the task.')) else: form = form_cls() return render_to_response('content/create_page.html', { 'form': form, 'project': project, }, context_instance=RequestContext(request))
def create_submission(request, slug): badge = get_object_or_404(Badge, slug=slug) if not badge.can_post_submission(request.user): messages.error(request, _('You can not apply for this badge.')) return http.HttpResponseRedirect(badge.get_absolute_url()) user = request.user.get_profile() related_projects = badge.groups.all() submission = None if request.method == 'POST': form = badge_forms.SubmissionForm(request.POST) if form.is_valid(): submission = form.save(commit=False) submission.badge = badge submission.author = user if 'show_preview' not in request.POST: submission.save() messages.success(request, _('Submission created and out for review!')) return http.HttpResponseRedirect(submission.get_absolute_url()) else: messages.error(request, _('Please correct errors below.')) else: form = badge_forms.SubmissionForm(instance=badge) context = { 'form': form, 'badge': badge, 'related_projects': related_projects, } return render_to_response('badges/submission_edit.html', context, context_instance=RequestContext(request))
def accept_sign_up(request, slug, comment_id, as_organizer=False): page = get_object_or_404(Page, project__slug=slug, slug='sign-up') project = page.project answer = page.comments.get(pk=comment_id) organizing = project.organizers().filter(user=answer.author.user).exists() participating = project.participants().filter(user=answer.author.user).exists() if answer.reply_to or organizing or participating or request.method != 'POST': return HttpResponseForbidden(_("You can't see this page")) participation = Participation(project=project, user=answer.author, organizing=as_organizer) participation.save() new_rel = Relationship(source=answer.author, target_project=project) try: new_rel.save() except IntegrityError: pass accept_content = detail_description_content = render_to_string( "content/accept_sign_up_comment.html", {'as_organizer': as_organizer}) accept_comment = PageComment(content=accept_content, author = request.user.get_profile(), page = page, reply_to = answer, abs_reply_to = answer) accept_comment.save() if as_organizer: messages.success(request, _('Organizer added!')) else: messages.success(request, _('Participant added!')) return HttpResponseRedirect(answer.get_absolute_url())
def reply(request, message): message = get_object_or_404(Message, id=message) if message.recipient != request.user: return http.HttpResponseForbidden(_("Can't send email")) if request.method == 'POST': form = forms.ComposeForm(data=request.POST, sender=request.user.get_profile()) if form.is_valid(): form.save(sender=request.user) messages.success(request, _('Message successfully sent.')) return http.HttpResponseRedirect(reverse('drumbeatmail_inbox')) else: messages.error( request, _('There was an error sending your message' '. Please try again.')) else: if not message.subject.startswith('Re: '): subject = 'Re: %s' % (message.subject, ) else: subject = message.subject form = forms.ComposeForm( initial={ 'recipient': message.sender.get_profile().username, 'subject': subject, }) return render_to_response('drumbeatmail/reply.html', { 'form': form, 'message': message, }, context_instance=RequestContext(request))
def assess_peer(request, slug): badge = get_object_or_404(Badge, slug=slug, assessment_type=Badge.PEER, badge_type=Badge.COMMUNITY) user = request.user.get_profile() assessment = None if request.method == 'POST': form = badge_forms.PeerAssessmentForm(badge, user, request.POST) if form.is_valid(): assessment = form.save(commit=False) if 'show_preview' not in request.POST: assessment.assessor = user assessment.assessed = form.cleaned_data['peer'] assessment.badge = badge assessment.save() messages.success(request, _('Thank you for giving a badge to your peer!')) return http.HttpResponseRedirect(badge.get_absolute_url()) else: messages.error(request, _('Please correct errors below.')) else: if 'peer' in request.GET: form = badge_forms.PeerAssessmentForm( badge, user, initial={'peer': request.GET['peer']}) else: form = badge_forms.PeerAssessmentForm( badge, user) form = badge_forms.PeerAssessmentForm(badge, user) context = { 'badge': badge, 'assessment': assessment, 'form': form, } return render_to_response('badges/peer_assessment.html', context, context_instance=RequestContext(request))
def clone(request): user = request.user.get_profile() if request.method == "POST": form = project_forms.CloneProjectForm(request.POST) if form.is_valid(): base_project = form.cleaned_data["project"] project = Project( name=base_project.name, category=base_project.category, other=base_project.other, other_description=base_project.other_description, short_description=base_project.short_description, long_description=base_project.long_description, clone_of=base_project, ) project.save() act = Activity(actor=user, verb=verbs["post"], scope_object=project, target_object=project) act.save() participation = Participation(project=project, user=user, organizing=True) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() detailed_description = Page( title=_("Full Description"), slug="full-description", content=base_project.detailed_description.content, listed=False, author_id=user.id, project_id=project.id, ) detailed_description.save() project.detailed_description_id = detailed_description.id base_sign_up = base_project.sign_up.get() sign_up = Signup( public=base_sign_up.public, between_participants=base_sign_up.between_participants, author_id=user.id, project_id=project.id, ) sign_up.save() project.save() tasks = Page.objects.filter(project=base_project, listed=True, deleted=False).order_by("index") for task in tasks: new_task = Page(title=task.title, content=task.content, author=user, project=project) new_task.save() links = Link.objects.filter(project=base_project).order_by("index") for link in links: new_link = Link(name=link.name, url=link.url, user=user, project=project) new_link.save() project.create() messages.success(request, _("The %s has been cloned.") % project.kind.lower()) return http.HttpResponseRedirect(reverse("projects_show", kwargs={"slug": project.slug})) else: messages.error(request, _("There was a problem cloning the study group, course, ...")) else: form = project_forms.CloneProjectForm() return render_to_response( "projects/project_clone.html", {"form": form, "clone_tab": True}, context_instance=RequestContext(request) )
def edit_membership(request, slug): school = get_object_or_404(School, slug=slug) if request.method == 'POST': form = school_forms.SchoolAddProjectForm(school, request.POST) if form.is_valid(): project = form.cleaned_data['project'] project.school = school project.save() messages.success( request, _('The %s was added to this school.') % project.kind.lower()) return http.HttpResponseRedirect( reverse('schools_edit_membership', kwargs=dict(slug=school.slug))) else: messages.error(request, _("There was an adding %s to this school.") % slug) else: form = school_forms.SchoolAddProjectForm(school) return render_to_response('schools/school_edit_membership.html', { 'school': school, 'form': form, 'projects': school.projects.all(), 'membership_tab': True, }, context_instance=RequestContext(request))
def edit_links(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) profile = request.user.get_profile() if request.method == "POST": form = project_forms.ProjectLinksForm(request.POST) if form.is_valid(): link = form.save(commit=False) link.project = project link.user = profile link.save() messages.success(request, _("Link added.")) return http.HttpResponseRedirect(reverse("projects_edit_links", kwargs=dict(slug=project.slug))) else: messages.error(request, _("There was an error adding your link.")) else: form = project_forms.ProjectLinksForm() links = Link.objects.select_related("subscription").filter(project=project) return render_to_response( "projects/project_edit_links.html", { "project": project, "form": form, "links": links, "links_tab": True, "can_view_metric_overview": metric_permissions[0], }, context_instance=RequestContext(request), )
def edit_participants(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == "POST": form = project_forms.ProjectAddParticipantForm(project, request.POST) if form.is_valid(): user = form.cleaned_data["user"] organizing = form.cleaned_data["organizer"] participation = Participation(project=project, user=user, organizing=organizing) participation.save() new_rel, created = Relationship.objects.get_or_create(source=user, target_project=project) new_rel.deleted = False new_rel.save() messages.success(request, _("Participant added.")) return http.HttpResponseRedirect(reverse("projects_edit_participants", kwargs=dict(slug=project.slug))) else: messages.error(request, _("There was an error adding the participant.")) else: form = project_forms.ProjectAddParticipantForm(project) return render_to_response( "projects/project_edit_participants.html", { "project": project, "form": form, "participations": project.participants().order_by("joined_on"), "participants_tab": True, "can_view_metric_overview": metric_permissions[0], "is_challenge": (project.category == project.CHALLENGE), }, context_instance=RequestContext(request), )
def profile_edit_links(request): profile = get_object_or_404(UserProfile, user=request.user) if request.method == 'POST': form = forms.ProfileLinksForm(request.POST) if form.is_valid(): messages.success(request, _('Profile link added.')) link = form.save(commit=False) log.debug("User instance: %s" % (profile.user,)) link.user = profile link.save() return http.HttpResponseRedirect( reverse('users_profile_edit_links'), ) else: messages.error(request, _('There was an error saving ' 'your link.')) else: form = forms.ProfileLinksForm() links = Link.objects.select_related('subscription').filter( user=profile, project__isnull=True) return render_to_response('users/profile_edit_links.html', { 'profile': profile, 'form': form, 'links': links, 'link_tab': True, }, context_instance=RequestContext(request))
def edit_next_steps(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == "POST": form = project_forms.ProjectAddNextProjectForm(project, request.POST) if form.is_valid(): next_project = form.cleaned_data["next_project"] project.next_projects.add(next_project) messages.success(request, _("Next step added.")) return http.HttpResponseRedirect(reverse("projects_edit_next_steps", kwargs=dict(slug=project.slug))) else: messages.error(request, _("There was an error adding that next step.")) else: form = project_forms.ProjectAddNextProjectForm(project) return render_to_response( "projects/project_edit_next_steps.html", { "project": project, "form": form, "next_steps": project.next_projects.all(), "next_steps_tab": True, "can_view_metric_overview": metric_permissions[0], "is_challenge": (project.category == project.CHALLENGE), }, context_instance=RequestContext(request), )
def delete_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) if page.deleted or not page.listed: return http.HttpResponseForbidden(_("You can't delete this page")) if not page.project.is_organizing(request.user) and not page.collaborative: return http.HttpResponseForbidden(_("You can't delete this page")) if request.method == "POST": old_version = PageVersion( title=page.title, sub_header=page.sub_header, content=page.content, author=page.author, date=page.last_update, page=page, ) old_version.save() page.author = request.user.get_profile() page.last_update = datetime.datetime.now() page.deleted = True page.save() messages.success(request, _("%s deleted!") % page.title) return http.HttpResponseRedirect( reverse("page_history", kwargs={"slug": page.project.slug, "page_slug": page.slug}) ) else: return render_to_response( "content/confirm_delete_page.html", {"page": page, "project": page.project}, context_instance=RequestContext(request), )
def delete_restore_comment(request, comment_id): comment = get_object_or_404(PageComment, id=comment_id) if not comment.can_edit(request.user): if comment.deleted: msg = _('You can not restore this comment.') else: msg = _('You can not delete this comment.') messages.error(request, msg) return http.HttpResponseRedirect(comment.get_absolute_url()) if request.method == 'POST': comment.deleted = not comment.deleted comment.save() if comment.deleted: msg = _('Comment deleted!') else: msg = _('Comment restored!') messages.success(request, msg) if comment.deleted: return http.HttpResponseRedirect( comment.page_object.get_absolute_url()) else: return http.HttpResponseRedirect(comment.get_absolute_url()) else: return render_to_response('replies/delete_restore_comment.html', { 'comment': comment, 'page_object': comment.page_object, 'scope_object': comment.scope_object, }, context_instance=RequestContext(request))
def password(request): profile = request.user.get_profile() password = "" password_confirm = "" if request.method == "POST": form = forms.PasswordEditForm(request.POST, request.FILES, instance=profile) if form.is_valid(): profile = form.save(commit=False) profile.set_password(form.cleaned_data['password']) messages.success(request, _('Password updated')) profile.user = request.user profile.save() else: messages.error( request, _('There are errors in this form. Please ' 'correct them and resubmit.')) else: form = forms.PasswordEditForm(instance=profile) return render_to_response('preferences/settings_password.html', { 'form': form, }, context_instance=RequestContext(request))
def edit_links_edit(request, slug, link): link = get_object_or_404(Link, id=link) form = project_forms.ProjectLinksForm(request.POST or None, instance=link) profile = get_object_or_404(UserProfile, user=request.user) project = get_object_or_404(Project, slug=slug) if link.project != project: return http.HttpResponseForbidden(_("You can't edit this link")) metric_permissions = project.get_metrics_permissions(request.user) if form.is_valid(): if link.subscription: #links_tasks.UnsubscribeFromFeed.apply_async(args=(link,)) link.subscription = None link.save() link = form.save(commit=False) link.user = profile link.project = project link.save() messages.success(request, _('Link updated.')) return http.HttpResponseRedirect( reverse('projects_edit_links', kwargs=dict(slug=project.slug))) else: form = project_forms.ProjectLinksForm(instance=link) return render_to_response('projects/project_edit_links_edit.html', { 'project': project, 'form': form, 'link': link, 'links_tab': True, 'can_view_metric_overview': metric_permissions[0], }, context_instance=RequestContext(request))
def delete_page(request, slug, page_slug): page = get_object_or_404(Page, project__slug=slug, slug=page_slug) if page.deleted or not page.listed: return http.HttpResponseForbidden(_("You can't delete this page")) if not page.project.is_organizing(request.user) and not page.collaborative: return http.HttpResponseForbidden(_("You can't delete this page")) if request.method == 'POST': old_version = PageVersion(title=page.title, sub_header=page.sub_header, content=page.content, author=page.author, date=page.last_update, page=page) old_version.save() page.author = request.user.get_profile() page.last_update = datetime.datetime.now() page.deleted = True page.save() messages.success(request, _('%s deleted!') % page.title) return http.HttpResponseRedirect( reverse('page_history', kwargs={ 'slug': page.project.slug, 'page_slug': page.slug })) else: return render_to_response('content/confirm_delete_page.html', { 'page': page, 'project': page.project, }, context_instance=RequestContext(request))
def edit_next_steps(request, slug): project = get_object_or_404(Project, slug=slug) metric_permissions = project.get_metrics_permissions(request.user) if request.method == 'POST': form = project_forms.ProjectAddNextProjectForm(project, request.POST) if form.is_valid(): next_project = form.cleaned_data['next_project'] project.next_projects.add(next_project) messages.success(request, _('Next step added.')) return http.HttpResponseRedirect(reverse( 'projects_edit_next_steps', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error adding that next step.')) else: form = project_forms.ProjectAddNextProjectForm(project) return render_to_response('projects/project_edit_next_steps.html', { 'project': project, 'form': form, 'next_steps': project.next_projects.all(), 'next_steps_tab': True, 'can_view_metric_overview': metric_permissions[0], 'is_challenge': (project.category == project.CHALLENGE), }, context_instance=RequestContext(request))
def edit_media(request, slug): project = get_object_or_404(Project, slug=slug) files = project.projectmedia_set.all() if request.method == 'POST': if files.count() > settings.MAX_PROJECT_FILES: messages.error( request, _('You have already used up your allotted ' 'number of file uploads. Please delete ' 'some files and try again.')) return http.HttpResponseRedirect( reverse('projects_edit_media', kwargs=dict(slug=project.slug))) form = project_forms.ProjectMediaForm(request.POST, request.FILES) if form.is_valid(): messages.success(request, _('File uploaded')) media = form.save(commit=False) media.project = project media.mime_type = form.cleaned_data['project_file'].content_type media.save() return http.HttpResponseRedirect( reverse('projects_edit_media', kwargs=dict(slug=project.slug))) else: messages.error(request, _('There was an error uploading ' 'your file.')) else: form = project_forms.ProjectMediaForm() return render_to_response('projects/project_edit_media.html', { 'files': files, 'form': form, 'project': project, }, context_instance=RequestContext(request))