예제 #1
0
def intro(request):
    if request.me.is_profile_complete \
            and request.me.is_profile_reviewed \
            and not request.me.is_profile_rejected:
        return redirect("profile", request.me.slug)

    if request.method == "POST":
        form = UserIntroForm(request.POST, request.FILES, instance=request.me)
        if form.is_valid():
            user = form.save(commit=False)

            # send to moderation
            user.is_profile_complete = True
            user.is_profile_reviewed = False
            user.is_profile_rejected = False
            user.save()

            # create intro post
            intro_post = Post.upsert_user_intro(user,
                                                form.cleaned_data["intro"],
                                                is_visible=False)

            # notify moderators to review profile
            async_task(notify_profile_needs_review, user, intro_post)

            return redirect("on_review")
    else:
        existing_intro = Post.get_user_intro(request.me)
        form = UserIntroForm(
            instance=request.me,
            initial={"intro": existing_intro.text if existing_intro else ""},
        )

    return render(request, "users/intro.html", {"form": form})
예제 #2
0
def profile(request, user_slug):
    user = get_object_or_404(User, slug=user_slug)

    if user.id == request.me.id:
        goto = request.GET.get("goto")
        if goto:
            return redirect(goto)

    tags = Tag.objects.filter(is_visible=True).all()

    intro = Post.get_user_intro(user)
    projects = Post.objects.filter(author=user, type=Post.TYPE_PROJECT).all()
    active_tags = {t.tag_id for t in UserTag.objects.filter(user=user).all()}
    achievements = UserBadge.objects.filter(user=user)[:8]
    expertises = UserExpertise.objects.filter(user=user).all()
    posts = Post.objects_for_user(request.me)\
        .filter(author=user, is_visible=True)\
        .exclude(type__in=[Post.TYPE_INTRO, Post.TYPE_PROJECT])

    return render(
        request, "users/profile.html", {
            "user": user,
            "intro": intro,
            "projects": projects,
            "tags": tags,
            "active_tags": active_tags,
            "achievements": achievements,
            "expertise_form": ExpertiseForm(),
            "expertises": expertises,
            "posts": paginate(request, posts),
        })
예제 #3
0
def intro(request):
    if request.me.moderation_status == User.MODERATION_STATUS_APPROVED:
        return redirect("profile", request.me.slug)

    if request.method == "POST":
        form = UserIntroForm(request.POST, request.FILES, instance=request.me)
        if form.is_valid():
            user = form.save(commit=False)

            # send to moderation
            user.moderation_status = User.MODERATION_STATUS_ON_REVIEW
            user.save()

            # create intro post
            intro_post = Post.upsert_user_intro(user,
                                                form.cleaned_data["intro"],
                                                is_visible=False)

            Geo.update_for_user(user)

            # notify moderators to review profile
            async_task(notify_profile_needs_review, user, intro_post)

            return redirect("on_review")
    else:
        existing_intro = Post.get_user_intro(request.me)
        form = UserIntroForm(
            instance=request.me,
            initial={"intro": existing_intro.text if existing_intro else ""},
        )

    return render(request, "users/intro.html", {"form": form})
예제 #4
0
    def handle(self, *args, **options):
        users = User.objects.filter(
            moderation_status=User.MODERATION_STATUS_ON_REVIEW)

        for user in users:
            intro = Post.get_user_intro(user)
            notify_profile_needs_review(user, intro)

        self.stdout.write("Done 🥙")
예제 #5
0
    def handle(self, *args, **options):
        users = User.objects.filter(is_profile_complete=True,
                                    is_profile_reviewed=False,
                                    is_profile_rejected=False)

        for user in users:
            intro = Post.get_user_intro(user)
            notify_profile_needs_review(user, intro)

        self.stdout.write("Done 🥙")
예제 #6
0
def profile(request, user_slug):
    if user_slug == "me":
        return redirect("profile", request.me.slug, permanent=False)

    user = get_object_or_404(User, slug=user_slug)

    if not request.me.is_moderator:
        # hide unverified users
        if user.moderation_status != User.MODERATION_STATUS_APPROVED:
            raise Http404()

    if user.id == request.me.id:
        goto = request.GET.get("goto")
        if goto and goto.startswith(settings.APP_HOST):
            return redirect(goto)

    tags = Tag.objects.filter(is_visible=True).all()

    intro = Post.get_user_intro(user)
    projects = Post.objects.filter(author=user,
                                   type=Post.TYPE_PROJECT,
                                   is_visible=True).all()
    active_tags = {t.tag_id for t in UserTag.objects.filter(user=user).all()}
    achievements = UserAchievement.objects.filter(
        user=user).select_related("achievement")
    expertises = UserExpertise.objects.filter(user=user).all()
    comments = Comment.visible_objects().filter(
        author=user, post__is_visible=True).order_by("-created_at")[:3]
    posts = Post.objects_for_user(request.me)\
        .filter(author=user, is_visible=True)\
        .exclude(type__in=[Post.TYPE_INTRO, Post.TYPE_PROJECT])

    return render(
        request, "users/profile.html", {
            "user": user,
            "intro": intro,
            "projects": projects,
            "tags": tags,
            "active_tags": active_tags,
            "achievements": [ua.achievement for ua in achievements],
            "expertises": expertises,
            "comments": comments,
            "posts": paginate(request, posts),
        })
예제 #7
0
파일: views.py 프로젝트: nett00n/vas3k.club
def profile(request, user_slug):
    user = get_object_or_404(User, slug=user_slug)

    if not request.me.is_moderator:
        # hide unverified users
        if not user.is_profile_complete or not user.is_profile_complete or user.is_profile_rejected:
            raise Http404()

    if user.id == request.me.id:
        goto = request.GET.get("goto")
        if goto:
            return redirect(goto)

    tags = Tag.objects.filter(is_visible=True).all()

    intro = Post.get_user_intro(user)
    projects = Post.objects.filter(author=user, type=Post.TYPE_PROJECT).all()
    active_tags = {t.tag_id for t in UserTag.objects.filter(user=user).all()}
    achievements = UserBadge.objects.filter(user=user)[:8]
    expertises = UserExpertise.objects.filter(user=user).all()
    comments = Comment.visible_objects().filter(
        author=user).order_by("-created_at")[:3]
    posts = Post.objects_for_user(request.me)\
        .filter(author=user, is_visible=True)\
        .exclude(type__in=[Post.TYPE_INTRO, Post.TYPE_PROJECT])

    return render(
        request, "users/profile.html", {
            "user": user,
            "intro": intro,
            "projects": projects,
            "tags": tags,
            "active_tags": active_tags,
            "achievements": achievements,
            "expertises": expertises,
            "comments": comments,
            "posts": paginate(request, posts),
        })