Exemple #1
0
def password_reset_view(request):
    """Allow users to recover their account when they lost their passwords.

    Returns:
        HttpResponse

    """
    error = None
    if request.method == 'POST':
        form = LostPasswordForm(request.POST)

        if form.is_valid():
            data = form.data

            try:
                user = User.objects.get(email=data['email'])
            except User.DoesNotExist:
                user = None

            if user is not None:
                token = create_forgot_password_token(user)
                send_mail_to_confirm_password_reset(token)

                return render_template('member/password_reset_confirm.html')

            else:
                error = 'Utilisateur introuvable avec cette adresse.'
    else:
        form = LostPasswordForm()

    return render_template('member/password_reset.html', {
        'form': form,
        'error': error
    })
Exemple #2
0
def settings_account(request):
    """Set current user's account settings.

    Returns:
        HttpResponse

    """

    if request.method == 'POST':
        form = ChangePasswordForm(request.user, request.POST)

        if form.is_valid():
            request.user.set_password(form.data['password_new'])
            request.user.save()

            messages.success(request, u'Le mot de passe a bien été modifié.')
            return redirect('/membres/parametres/profil')

        else:
            return render_template('member/settings_account.html', {
                'form': form
            })
    else:
        form = ChangePasswordForm(request.user)

        return render_template('member/settings_account.html', {
            'form': form
        })
Exemple #3
0
def register_view(request):
    """Allow new users to register, creating them an account.

    Returns:
        HttpResponse

    """
    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            data = form.data

            user = User.objects.create_user(data["username"], data["email"], data["password"])

            user.backend = "django.contrib.auth.backends.ModelBackend"
            user.is_active = False
            user.save()

            profile = Profile(user=user, show_email=False)

            profile.save()

            # We generate a new activation key for the user and save it
            token = create_activation_token(user)

            send_mail_to_confirm_registration(token)

            return render_template("member/register_confirmation.html")
        else:
            return render_template("member/register.html", {"form": form})

    form = RegisterForm()
    return render_template("member/register.html", {"form": form})
Exemple #4
0
def password_reset_view(request):
    """Allow users to recover their account when they lost their passwords.

    Returns:
        HttpResponse

    """
    error = None
    if request.method == 'POST':
        form = LostPasswordForm(request.POST)

        if form.is_valid():
            data = form.data

            try:
                user = User.objects.get(email=data['email'])
            except User.DoesNotExist:
                user = None

            if user is not None:
                token = create_forgot_password_token(user)
                send_mail_to_confirm_password_reset(token)

                return render_template('member/password_reset_confirm.html')

            else:
                error = 'Utilisateur introuvable avec cette adresse.'
    else:
        form = LostPasswordForm()

    return render_template('member/password_reset.html', {
        'form': form, 'error': error
    })
Exemple #5
0
def settings_account(request):
    """Set current user's account settings.

    Returns:
        HttpResponse

    """

    if request.method == 'POST':
        form = ChangePasswordForm(request.user, request.POST)

        if form.is_valid():
            request.user.set_password(form.data['password_new'])
            request.user.save()

            messages.success(request, u'Le mot de passe a bien été modifié.')
            return redirect('/membres/parametres/profil')

        else:
            return render_template('member/settings_account.html',
                                   {'form': form})
    else:
        form = ChangePasswordForm(request.user)

        return render_template('member/settings_account.html', {'form': form})
Exemple #6
0
def edit_post(request, post_pk):
    """Edit a specific post.

    Returns:
        HttpResponse

    """
    post = get_object_or_404(Post, pk=post_pk)

    # If we are editing the first post, we also want to edit the topic
    g_topic = None
    if post.position_in_topic == 1:
        g_topic = get_object_or_404(Topic, pk=post.topic.pk)

    by_staff = (post.author != request.user) \
        and request.user.has_perm('forum.change_post')

    # - non-moderated posts may be edited by their author or moderators;
    # - moderated posts only by moderators
    if (post.author != request.user) \
        and not by_staff:
        raise PermissionDenied

    if by_staff and request.method == 'GET':
        messages.add_message(
            request, messages.WARNING,
            u'Vous vous apprêtez à éditer un message en tant que modérateur '
            u'(auteur : {}).'
            .format(post.author.username))

    if request.method == 'POST':

        # Using the preview button
        if 'preview' in request.POST:
            if g_topic:
                g_topic = Topic(title=request.POST['title'],
                                subtitle=request.POST['subtitle'])
            return render_template('forum/edit_post.html', {
                'post': post, 'topic': g_topic, 'text': request.POST['text'],
            })

        # Else save changes to database
        post.text = request.POST['text']
        post.update = datetime.now()

        post.save()

        # Modifying the thread info if first post
        if g_topic:
            g_topic.title = request.POST['title']
            g_topic.subtitle = request.POST['subtitle']
            g_topic.save()

        return redirect(post.get_absolute_url())

    else:
        return render_template('forum/edit_post.html', {
            'post': post, 'topic': g_topic, 'text': post.text
        })
Exemple #7
0
def new(request, forum_pk):
    """Creates a new topic in a forum.

    Returns:
        HttpResponse

    """
    forum = get_object_or_404(Forum, pk=forum_pk)

    if request.method == 'POST':
        form = TopicForm(request.POST)

        if 'preview' in request.POST:
            return render_template('forum/new.html', {
                'forum': forum,
                'form': form,
                'text': form.data['text']
            })

        if form.is_valid():
            data = form.data
            # Creating the thread
            n_topic = Topic()
            n_topic.forum = forum
            n_topic.title = data['title']
            n_topic.subtitle = data['subtitle']
            n_topic.pubdate = datetime.now()
            n_topic.author = request.user
            n_topic.save()

            # Adding the first message
            post = Post()
            post.topic = n_topic
            post.author = request.user
            post.text = data['text']
            post.pubdate = datetime.now()
            post.position_in_topic = 1
            post.save()

            # Updating the topic
            n_topic.last_message = post
            n_topic.save()

            # Make the current user to follow his created topic
            follow(n_topic)

            return redirect(n_topic.get_absolute_url())
    else:
        form = TopicForm()

    return render_template('forum/new.html', {
        'form': form, 'forum': forum
    })
Exemple #8
0
def edit_extract(request):
    """Edit an extract.

    Returns:
        HttpResponse

    """

    try:
        extract_pk = request.GET['extrait']
    except KeyError:
        raise Http404

    extract = get_object_or_404(Extract, pk=extract_pk)

    b = extract.chapter.part
    if b and (request.user not in extract.chapter.part.tutorial.authors.all())\
            or not b and (request.user not in
                          extract.chapter.tutorial.authors.all()):
        raise Http404

    if request.method == 'POST':
        form = EditExtractForm(request.POST)

        if 'preview' in request.POST:
            return render_template('tutorial/edit_extract.html', {
                'form': form,
                'text': form.data['text'],
                'extract': extract
            })

        if form.is_valid():
            data = form.data

            extract.title = data['title']
            extract.text = data['text']
            extract.save()

            tutorial = extract.chapter.get_tutorial()
            tutorial.update = datetime.now()
            tutorial.save()

            return redirect(extract.get_absolute_url())
    else:
        form = EditExtractForm({
            'title': extract.title,
            'text': extract.text
        })

    return render_template('tutorial/edit_extract.html', {
        'extract': extract, 'form': form
    })
Exemple #9
0
def add_extract(request):
    """Add an extract.

    Returns:
        HttpResponse

    """

    try:
        chapter_pk = int(request.GET['chapitre'])
    except KeyError:
        raise Http404
    chapter = get_object_or_404(Chapter, pk=chapter_pk)

    notify = None

    if request.method == 'POST':
        form = ExtractForm(request.POST)

        if 'preview' in request.POST:
            return render_template('tutorial/new_extract.html', {
                'chapter': chapter, 'form': form, 'notify': notify,
                'text': form.data['text']
            })

        if form.is_valid():
            data = form.data
            extract = Extract()
            extract.chapter = chapter
            extract.position_in_chapter = chapter.get_extract_count() + 1
            extract.title = data['title']
            extract.text = data['text']
            extract.save()

            tutorial = extract.chapter.get_tutorial()
            tutorial.update = datetime.now()
            tutorial.save()

            if 'submit_continue' in request.POST:
                form = ExtractForm()
                messages.success(
                    request, u'Extrait « {0} » ajouté avec succès.'
                    .format(extract.title))
            else:
                return redirect(extract.get_absolute_url())
    else:
        form = ExtractForm()

    return render_template('tutorial/new_extract.html', {
        'chapter': chapter, 'form': form, 'notify': notify
    })
Exemple #10
0
def new(request, forum_pk):
    """Creates a new topic in a forum.

    Returns:
        HttpResponse

    """
    forum = get_object_or_404(Forum, pk=forum_pk)

    if request.method == 'POST':
        form = TopicForm(request.POST)

        if 'preview' in request.POST:
            return render_template('forum/new.html', {
                'forum': forum,
                'form': form,
                'text': form.data['text']
            })

        if form.is_valid():
            data = form.data
            # Creating the thread
            n_topic = Topic()
            n_topic.forum = forum
            n_topic.title = data['title']
            n_topic.subtitle = data['subtitle']
            n_topic.pubdate = datetime.now()
            n_topic.author = request.user
            n_topic.save()

            # Adding the first message
            post = Post()
            post.topic = n_topic
            post.author = request.user
            post.text = data['text']
            post.pubdate = datetime.now()
            post.position_in_topic = 1
            post.save()

            # Updating the topic
            n_topic.last_message = post
            n_topic.save()

            # Make the current user to follow his created topic
            follow(n_topic)

            return redirect(n_topic.get_absolute_url())
    else:
        form = TopicForm()

    return render_template('forum/new.html', {'form': form, 'forum': forum})
Exemple #11
0
def settings_profile(request):
    """Set current user's profile settings.

    Returns:
        HttpResponse

    """

    # Extra information about the current user
    profile = Profile.objects.get(user=request.user)

    if request.method == 'POST':

        form = ProfileForm(request.user, request.POST)

        if form.is_valid():
            profile.biography = form.data['biography']
            profile.site = form.data['site']
            profile.show_email = 'show_email' in form.data
            profile.avatar_url = form.data['avatar_url']
            profile.mail_on_private_message = \
                'mail_on_private_message' in form.data
            profile.save()

            messages.success(request,
                             u'Le profil a correctement été mis à jour.')

            return redirect('/membres/parametres/profil')

        else:
            return render_template('member/settings_profile.html',
                                   {'form': form})
    else:
        form = ProfileForm(request.user,
                           initial={
                               'biography':
                               profile.biography,
                               'site':
                               profile.site,
                               'avatar_url':
                               profile.avatar_url,
                               'show_email':
                               profile.show_email,
                               'mail_on_private_message':
                               profile.mail_on_private_message
                           })

        return render_template('member/settings_profile.html', {'form': form})
Exemple #12
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by('-date_joined')

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('member/index.html', {
        'members': shown_members,
        'members_count': members.count(),
        'pages': paginator_range(page, paginator.num_pages),
        'nb': page,
    })
Exemple #13
0
def edit_profile(request):
    """Edit an user's profile.

    Returns:
        HttpResponse

    """
    try:
        profile_pk = int(request.GET["profil"])
        profile = get_object_or_404(Profile, pk=profile_pk)
    except KeyError:
        profile = get_object_or_404(Profile, user=request.user)

    # Making sure the user is allowed to do that
    if not request.user == profile.user:
        raise PermissionDenied

    if request.method == "POST":
        form = ProfileForm(request.POST)
        if form.is_valid():
            data = form.data
            profile.biography = data["biography"]
            profile.site = data["site"]
            profile.user.email = data["email"]
            profile.show_email = "show_email" in data

            # Save the user and it's associated profile
            profile.user.save()
            profile.save()
            return redirect(profile.get_absolute_url())
        else:
            raise Http404
    else:
        return render_template("member/edit_profile.html", {"profile": profile})
Exemple #14
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by("-date_joined")

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get("page")

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        "member/index.html",
        {
            "members": shown_members,
            "members_count": members.count(),
            "pages": paginator_range(page, paginator.num_pages),
            "nb": page,
        },
    )
Exemple #15
0
def view_chapter(request, tutorial_pk, tutorial_slug, part_slug,
                 chapter_slug):
    """Display a chapter.

    Returns:
        HttpResponse

    """

    chapter = get_object_or_404(Chapter,
                                slug=chapter_slug,
                                part__slug=part_slug,
                                part__tutorial__pk=tutorial_pk)

    tutorial = chapter.get_tutorial()
    if not tutorial.is_visible \
       and not request.user.has_perm('tutorial.modify_chapter') \
       and request.user not in tutorial.authors.all():
        if not (tutorial.is_beta and request.user.is_authenticated()):
            raise PermissionDenied

    if not tutorial_slug == slugify(tutorial.title)\
        or not part_slug == slugify(chapter.part.title)\
            or not chapter_slug == slugify(chapter.title):
        return redirect(chapter.get_absolute_url())

    return render_template('tutorial/view_chapter.html', {
        'chapter': chapter
    })
Exemple #16
0
def index(request):
    """Display tutorials list.

    Returns:
        HttpResponse

    """
    tutorials = Tutorial.objects.all() \
        .filter(is_visible=True) \
        .order_by('-pubdate')[:5]

    pending_tutorials = None
    if request.user.has_perm('tutorial.change_tutorial'):
        pending_tutorials = Tutorial.objects.filter(is_pending=True)

    categories = TutorialCategory.objects.all()

    try:
        random_tuto = Tutorial.objects.all() \
            .filter(is_visible=True) \
            .order_by('?')[0]
    except IndexError:
        random_tuto = None

    return render_template('tutorial/index.html', {
        'tutorials': tutorials,
        'pending_tutorials': pending_tutorials,
        'categories': categories,
        'random_tuto': random_tuto
    })
Exemple #17
0
def tags(request):
    ct = ContentType.objects.get(
        app_label='tutorial',
        model='tutorial'
    )
    tagged_items = TaggedItem.objects \
        .filter(content_type=ct)

    visible_tags = {}
    for item in tagged_items:
        tutorial = Tutorial.objects.get(id=item.object_id)
        if tutorial.is_visible or (request.user.is_authenticated() and
                                   tutorial.is_beta):
            cur = str(item.tag)
            if cur in visible_tags:
                visible_tags[cur] += 1
            else:
                visible_tags[cur] = 1

    # create dict of tags for sorting and easier acces in the template
    ret = []
    for key in visible_tags:
        ret.append({'name': key, 'value': visible_tags[key]})

    ret.sort(key=lambda k: k['value'], reverse=True)  # sort by nb of occurence

    return render_template('tutorial/tags.html', {
        'tags': ret
    })
Exemple #18
0
def moderation_post(request, post_pk):
    """Displays an useful toolbox for staff on a specific post.

    Args:
        post_pk: the post to act on

    """

    if not request.user.has_perm('forum.change_post'):
        raise PermissionDenied

    post = get_object_or_404(Post, pk=post_pk)

    if request.method == 'POST' and 'action' in request.POST:

        action = request.POST['action']

        # Empty string because moderation_text field is NOT NULL
        justify_text = ''
        if 'justify_text' in request.POST and request.POST['justify_text']:
            justify_text = request.POST['justify_text']

        if action == 'hide':
            post.is_moderated = True
            post.moderation_time = datetime.now()
            post.moderation_text = justify_text
            post.moderated_by = request.user

            post.save()

        return redirect(post.get_absolute_url())

    return render_template('forum/moderation/post.html', {
        'post': post
    })
Exemple #19
0
def edit_profile(request):
    """Edit an user's profile.

    Returns:
        HttpResponse

    """
    try:
        profile_pk = int(request.GET['profil'])
        profile = get_object_or_404(Profile, pk=profile_pk)
    except KeyError:
        profile = get_object_or_404(Profile, user=request.user)

    # Making sure the user is allowed to do that
    if not request.user == profile.user:
        raise PermissionDenied

    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():
            data = form.data
            profile.biography = data['biography']
            profile.site = data['site']
            profile.user.email = data['email']
            profile.show_email = 'show_email' in data

            # Save the user and it's associated profile
            profile.user.save()
            profile.save()
            return redirect(profile.get_absolute_url())
        else:
            raise Http404
    else:
        return render_template('member/edit_profile.html',
                               {'profile': profile})
Exemple #20
0
def index(request):
    """Display messages of the user.

    Returns:
        HttpResponse

    """
    # Delete using checkboxes
    if request.method == 'POST':
        if 'delete' in request.POST:
            delete_selected_inbox_messages(request)

    privatetopics = PrivateTopic.objects.all()\
        .filter(Q(participants__in=[request.user]) | Q(author=request.user)) \
        .distinct() \
        .order_by('-last_message__pubdate')

    # Paginator
    paginator = Paginator(privatetopics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_privatetopics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_privatetopics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_privatetopics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('messages/index.html', {
        'privatetopics': shown_privatetopics,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Exemple #21
0
def new_gallery(request):
    """Create a new gallery.

    Returns:
        HttpResponse

    """
    if request.method == 'POST':
        form = GalleryForm(request.POST)
        if form.is_valid():
            data = form.data
            # Creating the gallery
            gal = Gallery()
            gal.title = data['title']
            gal.subtitle = data['subtitle']
            gal.slug = slugify(data['title'])
            gal.pubdate = datetime.now()
            gal.save()

            # Attach user
            userg = UserGallery()
            userg.gallery = gal
            userg.mode = 'W'
            userg.user = request.user
            userg.save()

            return redirect(gal.get_absolute_url())
    else:
        form = GalleryForm()

    return render_template('gallery/new_gallery.html', {'form': form})
Exemple #22
0
def moderation_post(request, post_pk):
    """Displays an useful toolbox for staff on a specific post.

    Args:
        post_pk: the post to act on

    """

    if not request.user.has_perm('forum.change_post'):
        raise PermissionDenied

    post = get_object_or_404(Post, pk=post_pk)

    if request.method == 'POST' and 'action' in request.POST:

        action = request.POST['action']

        # Empty string because moderation_text field is NOT NULL
        justify_text = ''
        if 'justify_text' in request.POST and request.POST['justify_text']:
            justify_text = request.POST['justify_text']

        if action == 'hide':
            post.is_moderated = True
            post.moderation_time = datetime.now()
            post.moderation_text = justify_text
            post.moderated_by = request.user

            post.save()

        return redirect(post.get_absolute_url())

    return render_template('forum/moderation/post.html', {'post': post})
Exemple #23
0
def publications(request):
    """Show current user's tutorials.

    Returns:
        HttpResponse

    """

    tutorials = Tutorial.objects \
        .filter(authors=request.user)

    # Handle filter, if any
    active_filter = 'all'
    if 'filtre' in request.GET:
        if request.GET['filtre'] == 'beta':
            active_filter = 'beta'
            tutorials = tutorials.filter(is_beta=True)
        elif request.GET['filtre'] == 'publie':
            tutorials = tutorials.filter(is_visible=True)
            active_filter = 'published'

    # Finally order by pubdate
    tutorials = tutorials.order_by('-pubdate')

    return render_template('member/publications.html', {
        'user_tutorials': tutorials,
        'active_filter': active_filter
    })
Exemple #24
0
def followed_topics(request):
    """Displays all the topics followed by an user.

    Returns:
        HttpResponse

    """
    followed_topics = Profile.objects.get(user=request.user)\
        .get_followed_topics()

    # Paginator
    paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/followed_topics.html', {
            'followed_topics': shown_topics,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Exemple #25
0
def find_post(request, name):
    """Find all posts written by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    posts = Post.objects.all().filter(author=u)\
        .order_by('-pubdate')

    paginator = Paginator(posts, settings.POSTS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_posts = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_posts = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_posts = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/find_post.html', {
            'posts': shown_posts,
            'usr': u,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Exemple #26
0
def find_topic(request, name):
    """Find all topics created by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    topics = Topic.objects.all().filter(author=u)\
                          .order_by('-pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'forum/find_topic.html', {
            'topics': shown_topics,
            'usr': u,
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page
        })
Exemple #27
0
def publications(request):
    """Show current user's tutorials.

    Returns:
        HttpResponse

    """

    tutorials = Tutorial.objects \
        .filter(authors=request.user)

    # Handle filter, if any
    active_filter = 'all'
    if 'filtre' in request.GET:
        if request.GET['filtre'] == 'beta':
            active_filter = 'beta'
            tutorials = tutorials.filter(is_beta=True)
        elif request.GET['filtre'] == 'publie':
            tutorials = tutorials.filter(is_visible=True)
            active_filter = 'published'

    # Finally order by pubdate
    tutorials = tutorials.order_by('-pubdate')

    return render_template('member/publications.html', {
        'user_tutorials': tutorials,
        'active_filter': active_filter
    })
Exemple #28
0
def edit_image(request, gal_pk, img_pk):
    """Edit an image.

    Returns:
        HttpResponse

    """
    gal = get_object_or_404(Gallery, pk=gal_pk)
    img = get_object_or_404(Image, pk=img_pk)

    if request.method == 'POST':
        form = EditImageForm(request.POST)
        if form.is_valid():
            img.title = request.POST['title']
            img.legend = request.POST['legend']
            img.update = datetime.now()

            img.save()

            # Redirect to the document list after POST
            return redirect(gal.get_absolute_url())
    else:
        form = EditImageForm(initial={
            'title': img.title,
            'legend': img.legend
        })

    return render_template('gallery/edit_image.html', {
        'form': form,
        'gallery': gal,
        'image': img
    })
Exemple #29
0
def index(request):
    """Display list of registered users.

    Returns:
        HttpResponse

    """
    members = User.objects.order_by('-date_joined')

    paginator = Paginator(members, settings.MEMBERS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_members = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_members = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_members = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template(
        'member/index.html', {
            'members': shown_members,
            'members_count': members.count(),
            'pages': paginator_range(page, paginator.num_pages),
            'nb': page,
        })
Exemple #30
0
def followed_topics(request):
    """Displays all the topics followed by an user.

    Returns:
        HttpResponse

    """
    followed_topics = request.user.get_profile().get_followed_topics()

    # Paginator
    paginator = Paginator(followed_topics, settings.FOLLOWED_TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/followed_topics.html', {
        'followed_topics': shown_topics,
        'pages': paginator_range(page, paginator.num_pages),
        'nb': page
    })
Exemple #31
0
def find_post(request, name):
    """Find all posts written by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    posts = Post.objects.all().filter(author=u)\
        .order_by('-pubdate')

    paginator = Paginator(posts, settings.POSTS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_posts = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_posts = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_posts = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/find_post.html', {
        'posts': shown_posts, 'usr': u,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Exemple #32
0
def find_topic(request, name):
    """Find all topics created by an user.

    Returns:
        HttpResponse

    """
    u = get_object_or_404(User, username=name)

    topics = Topic.objects.all().filter(author=u)\
                          .order_by('-pubdate')

    # Paginator
    paginator = Paginator(topics, settings.TOPICS_PER_PAGE)
    page = request.GET.get('page')

    try:
        shown_topics = paginator.page(page)
        page = int(page)
    except PageNotAnInteger:
        shown_topics = paginator.page(1)
        page = 1
    except EmptyPage:
        shown_topics = paginator.page(paginator.num_pages)
        page = paginator.num_pages

    return render_template('forum/find_topic.html', {
        'topics': shown_topics, 'usr': u,
        'pages': paginator_range(page, paginator.num_pages), 'nb': page
    })
Exemple #33
0
def new_image(request, gal_pk):
    """Add a new image to a gallery.

    Returns:
        HttpResponse

    """
    gal = get_object_or_404(Gallery, pk=gal_pk)

    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid() \
           and request.FILES['physical'].size < settings.IMAGE_MAX_SIZE:
            img = Image()
            img.physical = request.FILES['physical']
            img.gallery = gal
            img.title = request.POST['title']
            img.slug = slugify(request.FILES['physical'])
            img.legend = request.POST['legend']
            img.pubdate = datetime.now()

            img.save()

            # Redirect to the document list after POST
            return redirect(gal.get_absolute_url())
    else:
        form = ImageForm()  # A empty, unbound form

    return render_template('gallery/new_image.html', {
        'form': form,
        'gallery': gal
    })
Exemple #34
0
def help_markdown(request):
    """Display a page with a markdown helper.

    Returns:
        HttpResponse

    """
    return render_template('pages/help_markdown.html')
Exemple #35
0
def index(request):
    """Display list of available static pages.

    Returns:
        HttpResponse

    """
    return render_template('pages/index.html')
Exemple #36
0
def help_markdown(request):
    """Display a page with a markdown helper.

    Returns:
        HttpResponse

    """
    return render_template('pages/help_markdown.html')
Exemple #37
0
def about(request):
    """Display many informations about the website.

    Returns:
        HttpResponse

    """
    return render_template('pages/about.html')
Exemple #38
0
def index(request):
    """Display list of available static pages.

    Returns:
        HttpResponse

    """
    return render_template('pages/index.html')
Exemple #39
0
def about(request):
    """Display many informations about the website.

    Returns:
        HttpResponse

    """
    return render_template('pages/about.html')
Exemple #40
0
def by_category(request, name):
    """Display all tutorials belonging to a specific category.

    Returns:
        HttpResponse

    """

    # Deduce category to display based on its name
    if name == 'tous':
        category = TutorialCategory(title=u'Tous les tutoriels', slug=u'tous')
        tutorials = Tutorial.objects \
            .filter(is_beta=False, is_visible=True) \
            .order_by('-pubdate')
    elif name == 'autres':
        category = TutorialCategory(title=u'Non classés', slug=u'autres')
        tutorials = Tutorial.objects \
            .filter(is_beta=False, is_visible=True) \
            .filter(category=None) \
            .order_by('-pubdate')
    elif name == 'beta':
        # Only visible for members
        if not request.user.is_authenticated():
            raise PermissionDenied

        category = TutorialCategory(title=u'Bêta', slug=u'beta')
        tutorials = Tutorial.objects \
            .filter(is_beta=True) \
            .order_by('-pubdate')
    else:
        category = get_object_or_404(TutorialCategory, slug=name)
        tutorials = Tutorial.objects \
            .filter(category=category, is_beta=False, is_visible=True) \
            .order_by('-pubdate')

    paginator = Paginator(tutorials, settings.TUTORIALS_PER_PAGE)

    try:
        page_nbr = int(request.GET['page'])
    except KeyError:
        page_nbr = 1

    try:
        tutorials = paginator.page(page_nbr)
    except PageNotAnInteger:
        tutorials = paginator.page(1)
    except EmptyPage:
        raise Http404

    categories = TutorialCategory.objects.all()

    return render_template('tutorial/by_category.html', {
        'category': category,
        'categories': categories,
        'tutorials': tutorials,
        'nb': page_nbr,
        'pages': paginator_range(page_nbr, paginator.num_pages),
    })
Exemple #41
0
def settings_profile(request):
    """Set current user's profile settings.

    Returns:
        HttpResponse

    """

    # Extra information about the current user
    profile = Profile.objects.get(user=request.user)

    if request.method == 'POST':

        form = ProfileForm(request.user, request.POST)

        if form.is_valid():
            profile.biography = form.data['biography']
            profile.site = form.data['site']
            profile.show_email = 'show_email' in form.data
            profile.avatar_url = form.data['avatar_url']
            profile.mail_on_private_message = \
                'mail_on_private_message' in form.data
            profile.save()

            messages.success(
                request, u'Le profil a correctement été mis à jour.')

            return redirect('/membres/parametres/profil')

        else:
            return render_template('member/settings_profile.html', {
                'form': form
            })
    else:
        form = ProfileForm(request.user, initial={
            'biography': profile.biography,
            'site': profile.site,
            'avatar_url': profile.avatar_url,
            'show_email': profile.show_email,
            'mail_on_private_message': profile.mail_on_private_message}
        )

        return render_template('member/settings_profile.html', {
            'form': form
        })
Exemple #42
0
def settings_profile(request):
    """Set current user's profile settings.

    Returns:
        HttpResponse

    """

    # Extra information about the current user
    profile = Profile.objects.get(user=request.user)

    if request.method == "POST":

        form = ProfileForm(request.user, request.POST)

        if form.is_valid():
            profile.biography = form.data["biography"]
            profile.site = form.data["site"]
            profile.show_email = "show_email" in form.data
            profile.avatar_url = form.data["avatar_url"]
            profile.mail_on_private_message = "mail_on_private_message" in form.data
            profile.save()

            messages.success(request, u"Le profil a correctement été mis à jour.")

            return redirect("/membres/parametres/profil")

        else:
            return render_template("member/settings_profile.html", {"form": form})
    else:
        form = ProfileForm(
            request.user,
            initial={
                "biography": profile.biography,
                "site": profile.site,
                "avatar_url": profile.avatar_url,
                "show_email": profile.show_email,
                "mail_on_private_message": profile.mail_on_private_message,
            },
        )

        return render_template("member/settings_profile.html", {"form": form})
Exemple #43
0
def gallery_list(request):
    """Display the gallery list with all their images.

    Returns:
        HttpResponse

    """
    galleries = UserGallery.objects.all().filter(user=request.user)

    return render_template('gallery/gallery_list.html',
                           {'galleries': galleries})
Exemple #44
0
def details(request, user_name):
    """Display details about a profile.

    Returns:
        HttpResponse

    """
    usr = get_object_or_404(User, username=user_name)
    profile = get_object_or_404(Profile, user=usr)

    return render_template("member/profile.html", {"usr": usr, "profile": profile})
Exemple #45
0
def index(request):
    """Display the category list with all their forums.

    Returns:
        HttpResponse

    """
    categories = Category.objects.all() \
        .order_by('position')

    return render_template('forum/index.html', {'categories': categories})
Exemple #46
0
def add_chapter(request):
    """Add a new chapter to a part.

    Returns:
        HttpResponse

    """
    try:
        part_pk = request.GET['partie']
    except KeyError:
        raise Http404
    part = get_object_or_404(Part, pk=part_pk)

    # TODO: do not show error about empty title on new form

    # Make sure the user is allowed to do that
    if request.user not in part.tutorial.authors.all():
        raise PermissionDenied

    if request.method == 'POST':
        form = AddChapterForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.data

            chapter = Chapter()
            chapter.title = data['title']
            chapter.introduction = data['introduction']
            chapter.conclusion = data['conclusion']
            chapter.part = part
            chapter.position_in_part = part.get_chapters().count() + 1
            chapter.update_position_in_tutorial()

            if 'image' in request.FILES:
                chapter.image = request.FILES['image']

            chapter.save()

            tutorial = chapter.get_tutorial()
            tutorial.update = datetime.now()
            tutorial.save()

            if 'submit_continue' in request.POST:
                form = AddChapterForm({'part': part.pk})
                messages.success(request,
                                 u'Chapitre « {0} » ajouté avec succès.'
                                 .format(chapter.title))
            else:
                return redirect(chapter.get_absolute_url())
    else:
        form = AddChapterForm({'part': part.pk})

    return render_template('tutorial/new_chapter.html', {
        'part': part, 'form': form
    })
Exemple #47
0
def home(request):
    """Display the home page with last articles, tutorials and topics added.

    Returns:
        HttpResponse

    """
    return render_template('home.html', {
        'last_articles': get_last_articles(),
        'last_tutorials': get_last_tutorials(),
        'last_topics': get_last_topics(),
    })
Exemple #48
0
def import_tutorial(request):
    error = None
    if request.method == 'POST':
        form = ImportTutorialForm(request.POST, request.FILES)
        if form.is_valid():
            data = form.data
            source = request.FILES['markdown']

            try:
                # Consider input file as UTF-8 text with BOM (or not)
                content = source.read().decode('utf-8-sig')

                ti = loader.TutorialImporter(request.user, data['size'])
                ti.from_text(content)
                ti.run()
            except UnicodeError as e:
                error = u'Erreur unicode de l’octet {} à {} : {}.'.format(
                    e.start,
                    e.end,
                    e.reason
                )
            except loader.NegativeTitleLevelError as e:
                error = u'Descente de niveau de titre ({}) en dessous du ' \
                        u'niveau principal ({}), ligne {}.'.format(
                            e.level,
                            e.previous_level,
                            e.line
                        )
            except loader.InvalidLevelIncreaseError as e:
                error = u'Descente de niveau de titre trop rapide ' \
                        u'(de {} à {}), ligne {}.'.format(
                            e.previous_level,
                            e.level,
                            e.line
                        )
            except loader.EmptyTitleError as e:
                error = u'Titre vide, ligne {}.'.format(
                    e.line
                )
            except loader.NoTitleFoundError:
                error = u'Aucun titre n’a été trouvé.'

            if not error:
                return redirect(ti.tutorial.get_absolute_url())

    else:
        form = ImportTutorialForm()

    return render_template('tutorial/import_tutorial.html', {
        'form': form,
        'error': error
    })
Exemple #49
0
def home(request):
    """Display the home page with last articles, tutorials and topics added.

    Returns:
        HttpResponse

    """
    return render_template(
        'home.html', {
            'last_articles': get_last_articles(),
            'last_tutorials': get_last_tutorials(),
            'last_topics': get_last_topics(),
        })
Exemple #50
0
def index(request):
    """Display the category list with all their forums.

    Returns:
        HttpResponse

    """
    categories = Category.objects.all() \
        .order_by('position')

    return render_template('forum/index.html', {
        'categories': categories
    })
Exemple #51
0
def details(request, user_name):
    """Display details about a profile.

    Returns:
        HttpResponse

    """
    usr = get_object_or_404(User, username=user_name)
    profile = get_object_or_404(Profile, user=usr)

    return render_template('member/profile.html', {
        'usr': usr,
        'profile': profile
    })
Exemple #52
0
def cat_details(request, cat_slug):
    """Display the forums belonging to the given category.

    Returns:
        HttpResponse

    """
    category = get_object_or_404(Category, slug=cat_slug)
    forums = Forum.objects.all().filter(category__pk=category.pk)

    return render_template('forum/cat_details.html', {
        'category': category,
        'forums': forums
    })