Example #1
0
def show_page(request, slug, page_slug, pagination_page=1):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return http.HttpResponseRedirect(
                reverse('page_history',
                        kwargs={
                            'slug': page.project.slug,
                            'page_slug': page.slug
                        }))
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    first_level_comments = page.comments.filter(
        reply_to__isnull=True).order_by('-created_on')
    paginator = Paginator(first_level_comments, 5)
    try:
        current_page = paginator.page(pagination_page)
    except EmptyPage:
        raise http.Http404

    return render_to_response('content/page.html', {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'first_level_comments': first_level_comments,
        'paginator': paginator,
        'page_num': pagination_page,
        'next_page': int(pagination_page) + 1,
        'prev_page': int(pagination_page) - 1,
        'num_pages': paginator.num_pages,
        'pagination_page': current_page,
    },
                              context_instance=RequestContext(request))
Example #2
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']
            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))
Example #3
0
def profile_create(request):
    try:
        request.user.get_profile()
        return http.HttpResponseRedirect(reverse('dashboard'))
    except UserProfile.DoesNotExist:
        pass
    form = forms.CreateProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)
        profile.user = request.user
        profile.id = profile.user.id
        profile.user.email = profile.email
        profile.user.save()
        profile.confirmation_code = profile.generate_confirmation_code()
        profile.save()
        path = reverse('users_confirm_registration', kwargs={
            'username': profile.username,
            'token': profile.confirmation_code,
        })
        url = request.build_absolute_uri(path)
        profile.email_confirmation_code(url)
        msg = _('Thanks! We have sent an email to %s with '
                'instructions for completing your '
                'registration.') % profile.email
        messages.info(request, msg)
        return http.HttpResponseRedirect(reverse('dashboard'))
    else:
        messages.error(request, _('There are errors in this form. Please '
                                      'correct them and resubmit.'))
    return render_to_response('dashboard/setup_profile.html', {
        'form': form,
        'domain': Site.objects.get_current().domain,
    }, context_instance=RequestContext(request))
Example #4
0
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))
Example #5
0
def page_index_down(request, slug, counter):
    # Page goes down in the sidebar index (page.index increases).
    project = get_object_or_404(Project, slug=slug)
    try:
        counter = int(counter)
    except ValueError:
        raise http.Http404
    organizing = project.is_organizing(request.user)
    if not organizing and project.category != Project.STUDY_GROUP:
        messages.error(request, _('You can not change tasks order.'))
        return http.HttpResponseRedirect(project.get_absolute_url())
    content_pages = Page.objects.filter(project__pk=project.pk, listed=True,
        deleted=False).order_by('index')
    if counter < 0 or content_pages.count() - 1 <= counter:
        raise http.Http404
    next_page = content_pages[counter + 1]
    page = content_pages[counter]
    next_page.index, page.index = page.index, next_page.index
    # TODO: Fix this so no update messages are added to the wall but
    # we don't loose the data for the minor_update field of PageVersion.
    # For now relly on the Activity model to store this information.
    next_page.minor_update = page.minor_update = True
    page.save()
    next_page.save()
    return http.HttpResponseRedirect(project.get_absolute_url() + '#tasks')
Example #6
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))
Example #7
0
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))
Example #8
0
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))
Example #9
0
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))
Example #10
0
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))
Example #11
0
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))
Example #12
0
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))
Example #13
0
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))
Example #14
0
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))
Example #15
0
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))
Example #16
0
def create_project_status(request, project_id):
    project = get_object_or_404(Project, id=project_id)
    if project.category == Project.CHALLENGE:
        url = reverse('projects_discussion_area',
                      kwargs=dict(slug=project.slug))
    else:
        url = project.get_absolute_url()
    if request.method != 'POST' or 'status' not in request.POST:
        return HttpResponseRedirect(url)
    if not project.is_participating(request.user):
        return HttpResponseRedirect(url)
    if project.is_organizing(request.user):
        form = ImportantStatusForm(data=request.POST)
    else:
        form = StatusForm(data=request.POST)
    if form.is_valid():
        status = form.save(commit=False)
        status.author = request.user.get_profile()
        status.project = project
        status.save()
        log.debug("Saved status by user (%d) to study group (%d): %s" %
                  (status.author.id, project.id, status))
    else:
        log.debug("form error: %s" % (str(form.errors)))
        messages.error(request,
                       _('There was an error posting '
                         'your status update'))
    return HttpResponseRedirect(url)
Example #17
0
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))
Example #18
0
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))
Example #19
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,
    }, context_instance=RequestContext(request))
Example #20
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))
Example #21
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,
        'is_challenge': (project.category == project.CHALLENGE),
    }, context_instance=RequestContext(request))
Example #22
0
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))
Example #23
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,
        'is_challenge': (project.category == project.CHALLENGE),
    }, context_instance=RequestContext(request))
Example #24
0
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))
Example #25
0
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))
Example #26
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))
Example #27
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))
Example #28
0
def show_page(request, slug, page_slug, pagination_page=1):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return HttpResponseRedirect(reverse('page_history', kwargs={'slug':page.project.slug,
                'page_slug':page.slug}))
        else:
            return HttpResponseRedirect(page.project.get_absolute_url())
    first_level_comments = page.comments.filter(reply_to__isnull=True).order_by('-created_on')
    
    paginator = Paginator(first_level_comments, 5)
    try:
        current_page = paginator.page(pagination_page)
    except EmptyPage:
        raise http.Http404

    return render_to_response('content/page.html', {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'first_level_comments': first_level_comments,
        'paginator': paginator,
        'page_num': pagination_page,
        'next_page': int(pagination_page) + 1,
        'prev_page': int(pagination_page) - 1,
        'num_pages': paginator.num_pages,
        'pagination_page': current_page,
    }, context_instance=RequestContext(request))
Example #29
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))
Example #30
0
def create_project_status(request, project_id):
    if request.method != 'POST' or 'status' not in request.POST:
        return HttpResponseRedirect(reverse('dashboard_index'))
    project = get_object_or_404(Project, id=project_id)
    profile = request.user.get_profile()
    if profile != project.created_by and not profile.user.is_superuser \
            and not project.participants().filter(user=profile).exists():
        return HttpResponseRedirect(reverse('dashboard_index'))
    if profile == project.created_by or profile.user.is_superuser:
        form = ImportantStatusForm(data=request.POST)
    else:
        form = StatusForm(data=request.POST)
    if form.is_valid():
        status = form.save(commit=False)
        status.author = request.user.get_profile()
        status.project = project
        status.save()
        log.debug("Saved status by user (%d) to study group (%d): %s" % (
        profile.id, project.id, status))
    else:
        log.debug("form error: %s" % (str(form.errors)))
        messages.error(request, _('There was an error posting '
                                  'your status update'))
    return HttpResponseRedirect(
        reverse('projects_show', kwargs=dict(slug=project.slug)))
Example #31
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)
    )
Example #32
0
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))
Example #33
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),
    )
Example #34
0
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))
Example #35
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),
    )
Example #36
0
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))
Example #37
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),
    )
Example #38
0
def show_page(request, slug, page_slug):
    page = get_object_or_404(Page, project__slug=slug, slug=page_slug)
    is_challenge = (page.project.category == Project.CHALLENGE)
    if is_challenge and not page.listed:
        msg = _("This page is not accesible on a %s.")
        return http.HttpResponseForbidden(msg % page.project.kind.lower())
    can_edit = page.can_edit(request.user)
    if page.deleted:
        messages.error(request, _('This task was deleted.'))
        if can_edit:
            return http.HttpResponseRedirect(reverse('page_history',
                kwargs={'slug': page.project.slug, 'page_slug': page.slug}))
        else:
            return http.HttpResponseRedirect(page.project.get_absolute_url())
    new_comment_url = reverse('page_comment', kwargs=dict(
        scope_app_label='projects', scope_model='project',
        scope_pk=page.project.id, page_app_label='content',
        page_model='page', page_pk=page.id))
    first_level_comments = page.first_level_comments()
    all_listed_pages = page.project.pages.filter(deleted=False,
        listed=True).order_by('index')

    context = {
        'page': page,
        'project': page.project,
        'can_edit': can_edit,
        'can_comment': page.can_comment(request.user),
        'new_comment_url': new_comment_url,
        'is_challenge': is_challenge,
        'all_listed_pages': all_listed_pages,
    }
    context.update(get_pagination_context(request, first_level_comments))
    context.update(get_google_tracking_context(page.project))
    return render_to_response('content/page.html', context,
        context_instance=RequestContext(request))
Example #39
0
def _move_page(request, slug, page_slug, direction="up"):
    # Page goes up in the sidebar index (page.index decreases)."""
    project = get_object_or_404(Project, slug=slug)
    organizing = project.is_organizing(request.user)
    if not organizing and project.category != Project.STUDY_GROUP:
        messages.error(request, _("You can not change tasks order."))
        return http.HttpResponseRedirect(project.get_absolute_url())
    content_pages = Page.objects.filter(project__pk=project.pk, listed=True, deleted=False).order_by("index")

    # find page we want to move
    index = [i for i, x in enumerate(content_pages) if x.slug == page_slug]
    if (
        len(index) != 1
        or direction == "up"
        and index[0] == 0
        or direction == "down"
        and index[0] == len(content_pages) - 1
    ):
        raise http.Http404

    if direction == "up":
        prev_page = content_pages[index[0] - 1]
        page = content_pages[index[0]]
    else:
        prev_page = content_pages[index[0] + 1]
        page = content_pages[index[0]]
    prev_page.index, page.index = page.index, prev_page.index
    # TODO: Fix this so no update messages are added to the wall but
    # we don't loose the data for the minor_update field of PageVersion.
    # For now relly on the Activity model to store this information.
    page.minor_update = prev_page.minor_update = True
    page.save()
    prev_page.save()
    return http.HttpResponseRedirect(project.get_absolute_url() + "#tasks")
Example #40
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))
Example #41
0
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))
Example #42
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))
Example #43
0
def page_index_down(request, slug, counter):
    # Page goes down in the sidebar index (page.index increases).
    project = get_object_or_404(Project, slug=slug)
    try:
        counter = int(counter)
    except ValueError:
        raise http.Http404
    organizing = project.is_organizing(request.user)
    if not organizing and project.category != Project.STUDY_GROUP:
        messages.error(request, _('You can not change tasks order.'))
        return http.HttpResponseRedirect(project.get_absolute_url())
    content_pages = Page.objects.filter(project__pk=project.pk,
                                        listed=True,
                                        deleted=False).order_by('index')
    if counter < 0 or content_pages.count() - 1 <= counter:
        raise http.Http404
    next_page = content_pages[counter + 1]
    page = content_pages[counter]
    next_page.index, page.index = page.index, next_page.index
    # TODO: Fix this so no update messages are added to the wall but
    # we don't loose the data for the minor_update field of PageVersion.
    # For now relly on the Activity model to store this information.
    next_page.minor_update = page.minor_update = True
    page.save()
    next_page.save()
    return http.HttpResponseRedirect(project.get_absolute_url() + '#tasks')
Example #44
0
def profile_create(request):
    try:
        request.user.get_profile()
        return http.HttpResponseRedirect(reverse('dashboard'))
    except UserProfile.DoesNotExist:
        pass
    form = forms.CreateProfileForm(request.POST)
    if form.is_valid():
        profile = form.save(commit=False)
        profile.user = request.user
        profile.id = profile.user.id
        profile.user.email = profile.email
        profile.user.save()
        profile.confirmation_code = profile.generate_confirmation_code()
        profile.save()
        path = reverse('users_confirm_registration', kwargs={
            'username': profile.username,
            'token': profile.confirmation_code,
        })
        url = request.build_absolute_uri(path)
        profile.email_confirmation_code(url)
        msg = _('Thanks! We have sent an email to %s with '
                'instructions for completing your '
                'registration.') % profile.email
        messages.info(request, msg)
        request.session['send_registration_event'] = True
        return http.HttpResponseRedirect(reverse('dashboard'))
    else:
        messages.error(request, _('There are errors in this form. Please '
                                      'correct them and resubmit.'))
    return render_to_response('dashboard/setup_profile.html', {
        'form': form,
        'domain': Site.objects.get_current().domain,
    }, context_instance=RequestContext(request))
Example #45
0
def delete(request):
    profile = request.user.get_profile()
    current_projects = profile.get_current_projects()
    pending_projects = []
    for project in current_projects['organizing']:
        if not project.archived and project.organizers().count() == 1:
            pending_projects.append(project)
    msg = _('You are the only organizer of %s active ')
    msg += _('study groups, courses, ...')
    if request.method == 'POST':
        if pending_projects:
            messages.error(request, msg % len(pending_projects))
            return HttpResponseRedirect(reverse('preferences_delete'))
        profile.deleted = True
        profile.user.is_active = False
        profile.save()
        profile.user.save()
        # logout the user.
        for s in Session.objects.all():
            if s.get_decoded().get('_auth_user_id') == profile.user.id:
                s.delete()
        return HttpResponseRedirect(reverse('users_logout'))
    return render_to_response('users/settings_delete.html',
        {'pending_projects': pending_projects, 'delete_tab': True},
        context_instance=RequestContext(request))
Example #46
0
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))
Example #47
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))
Example #48
0
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))
Example #49
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))
Example #50
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))
Example #51
0
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))
Example #52
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))
Example #53
0
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))
Example #54
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))
Example #55
0
def course_add_badge( request, course_id ):
    context = { }
    context = _populate_course_context(request, course_id, context)
    context['badges_active'] = True
    user = request.user

    form = CourseEmbeddedUrlForm()

    if request.method == "POST":
        form = CourseEmbeddedUrlForm(request.POST)

        if form.is_valid():
            content = None
            user_uri = u"/uri/user/{0}".format(user.username)
            try:
                content = add_content_from_response(
                    context['course']['uri'],
                    form.cleaned_data['url'], user_uri)
            except BadgeNotFoundException:
                form = CourseEmbeddedUrlForm()
                messages.error(request, _('Error! We could not retrieve this Badge'))
            if content:
                redirect_url = reverse('courses_content_show',
                                       kwargs={'course_id': course_id,
                                               'content_id': content['id']})
                return http.HttpResponseRedirect(redirect_url)

    context['form'] = form
    return render_to_response(
        'courses/course_badges.html',
        context,
        context_instance=RequestContext(request)
    )