Exemple #1
0
    def test_has_user_related(self):
        self.assertTrue(models.has_user_related(self.user1))
        self.assertTrue(models.has_user_related(self.user2))
        self.assertFalse(models.has_user_related(self.user3))

        anonymous = AnonymousUser()
        self.assertFalse(models.has_user_related(anonymous))
Exemple #2
0
def get_plan(user):
    """
    Return the plan of user.
    """
    if not has_user_related(user):
        return ""

    return get_user_related(user).plan
Exemple #3
0
def user_type(value):
    """
    Return the user type of a request.user object.
    """
    if not has_user_related(value):
        return False

    return get_user_related(value).__class__.__name__
Exemple #4
0
 def check_auth(self, request):
     """
     Allow premium users to query.
     """
     if has_user_related(request.user):
         user = get_user_related(request.user)
         return user.is_premium
     return False
def related_user(request):
    """
    A context processor that returns the related user from a request.user.

    :param request:        the request to be processed
    """
    if not has_user_related(request.user):
        return {}

    return {"related_user": get_user_related(request.user)}
Exemple #6
0
    def dehydrate(self, bundle):
        """
        Make sur the user does not see the fields he has no
        right to.

        :param bundle:        the bundle to trim
        """
        if not hasattr(bundle, "request") or not models.has_user_related(bundle.request.user):
            bundle.data = pick(bundle.data, *self.FIELD_ACCESS_NOT_LOGGED)
        else:
            user = models.get_user_related(bundle.request.user)
            if not user.is_premium:
                bundle.data = without(bundle.data, *self.FIELD_DENIED_BASIC)

        return bundle
Exemple #7
0
def profile(request, type, uid):
    """
    Display the profile of a user.
    A nice 404 view is shown to the user
    if the profile does not exist OR the profile
    is not premium.
    A nice 401 view is shown to the user if the
    profile didn't want to show itself to the user
    or globally.
    """
    if type not in ("famille", "prestataire"):
        raise Http404

    context = {}

    if type == "famille":
        ModelClass = Famille
        RatingClass = FamilleRatings
        RatingFormClass = forms.RatingFamilleForm
    else:
        ModelClass = Prestataire
        RatingClass = PrestataireRatings
        RatingFormClass = forms.RatingPrestataireForm

    try:
        user = ModelClass.objects.get(pk=uid)
    except ModelClass.DoesNotExist:
        return render(request, "profile/404.html", status=404)

    # the user can view its own profile but others cannot if he is not premium
    if request.related_user != user and not user.is_premium:
        return render(request, "profile/404.html", status=404)

    if not user.profile_access_is_authorized(request):
        return render(request, "profile/401.html", status=401)

    if has_user_related(request.user):
        related_user = get_user_related(request.user)
        context["related_user"] = related_user
        context["favorited"] = related_user.favorites.filter(object_id=user.pk, object_type=type.title()).count()

        # users cant vote for themselves or twice for a user
        if user != related_user and not RatingClass.user_has_voted_for(related_user, user):
            rating = RatingClass(user=user, by=related_user.simple_id)
            context["rating_form"] = RatingFormClass(instance=rating)

    return render(request, "profile/%s.html" % type, get_context(profile=user, **context))
Exemple #8
0
def register(request, social=None, type=None):
    """
    Register view. Allow user creation.
    """
    if not type:
        if request.method == "POST":
            form = forms.RegistrationForm(request.POST)
            if form.is_valid():
                form.save(request)
            else:
                return render(request, "registration/register.html", get_context(social=social, form=form))
        else:
            form = forms.RegistrationForm()
            return render(request, "registration/register.html", get_context(social=social, form=form))
    else:
        if not has_user_related(request.user):
            UserInfo.create_user(dj_user=request.user, type=type)
        else:
            return redirect('account')

    return HttpResponseRedirect('/confirmation/')
Exemple #9
0
def get_rating_form(profile, request_user):
    """
    Return the rating form instance for a profile and
    a given user. Return None in case of a problem
    or the request user already voted.

    :param profile:        the profile to be rated
    :param request_user:   the request user
    """
    if isinstance(profile, Famille):
        RatingClass = FamilleRatings
        RatingFormClass = RatingFamilleForm
    else:
        RatingClass = PrestataireRatings
        RatingFormClass = RatingPrestataireForm

    if has_user_related(request_user):
        related_user = get_user_related(request_user)
        if not RatingClass.user_has_voted_for(related_user, profile):
            rating = RatingClass(user=profile, by=related_user.simple_id)
            return RatingFormClass(instance=rating)
    return None
Exemple #10
0
def has_related(value):
    """
    Returns True if user has related user or not.
    """
    return has_user_related(value)