コード例 #1
0
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))
コード例 #2
0
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))
コード例 #3
0
ファイル: views.py プロジェクト: queerpedagogue/lernanta
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))
コード例 #4
0
ファイル: views.py プロジェクト: IAmCorbin/lernanta
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))
コード例 #5
0
ファイル: views.py プロジェクト: apnerve/lernanta
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))
コード例 #6
0
ファイル: views.py プロジェクト: theinterned/batucada
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))
コード例 #7
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #8
0
ファイル: views.py プロジェクト: Acidburn0zzz/lernanta
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))
コード例 #9
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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))
コード例 #10
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #11
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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))
コード例 #12
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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))
コード例 #13
0
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))
コード例 #14
0
ファイル: views.py プロジェクト: toolness/lernanta
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))
コード例 #15
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #16
0
ファイル: views.py プロジェクト: Suggsgested/lernanta
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))
コード例 #17
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #18
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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))
コード例 #19
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #20
0
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))
コード例 #21
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #22
0
ファイル: views.py プロジェクト: mkcode/lernanta
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))
コード例 #23
0
ファイル: views.py プロジェクト: phastafrican/lernanta
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,
    }))        
コード例 #24
0
ファイル: views.py プロジェクト: Cyber-World-Uk-Ltd/lernanta
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))
コード例 #25
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #26
0
ファイル: views.py プロジェクト: IAmCorbin/lernanta
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))
コード例 #27
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #28
0
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))
コード例 #29
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #30
0
ファイル: views.py プロジェクト: toolness/lernanta
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))
コード例 #31
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #32
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #33
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #34
0
ファイル: views.py プロジェクト: Acidburn0zzz/lernanta
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))
コード例 #35
0
ファイル: views.py プロジェクト: ajufrancis/lernanta
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))
コード例 #36
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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))
コード例 #37
0
ファイル: views.py プロジェクト: JiaFeiX/lernanta
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))
コード例 #38
0
ファイル: views.py プロジェクト: foxtrotcharlie/lernanta
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())
コード例 #39
0
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))
コード例 #40
0
ファイル: views.py プロジェクト: apnerve/lernanta
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))
コード例 #41
0
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)
    )
コード例 #42
0
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))
コード例 #43
0
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),
    )
コード例 #44
0
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))
コード例 #45
0
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),
    )
コード例 #46
0
ファイル: views.py プロジェクト: mkcode/lernanta
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))
コード例 #47
0
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),
    )
コード例 #48
0
ファイル: views.py プロジェクト: queerpedagogue/lernanta
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))
コード例 #49
0
ファイル: views.py プロジェクト: jessykate/lernanta
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),
        )
コード例 #50
0
ファイル: views.py プロジェクト: Cyber-World-Uk-Ltd/lernanta
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))
コード例 #51
0
ファイル: views.py プロジェクト: AndyHendy/lernanta
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))
コード例 #52
0
ファイル: views.py プロジェクト: IAmCorbin/lernanta
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))
コード例 #53
0
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))
コード例 #54
0
ファイル: views.py プロジェクト: IAmCorbin/lernanta
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))
コード例 #55
0
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))