Example #1
0
    def test_compute_user_visibility_filters(self):
        user = AnonymousUser()
        f = models.compute_user_visibility_filters(user)
        self.assertEqual(f.children, [('visibility_global', True)])

        f = models.compute_user_visibility_filters(self.user1)
        self.assertEqual(f.children, [('visibility_global', True), ('visibility_family', True)])

        f = models.compute_user_visibility_filters(self.user2)
        self.assertEqual(f.children, [('visibility_global', True), ('visibility_prestataire', True)])
Example #2
0
def search(request):
    """
    Search view.
    """
    data = request.POST if request.method == "POST" else request.GET
    search_type = data.get("type")
    if request.user.is_authenticated():
        related = get_user_related(request.user)
        favorites = related.favorites.all()
        if not search_type and isinstance(related, Prestataire):
            search_type = "famille"
    else:
        favorites = []

    search_type = "prestataire" if search_type not in ["famille", "prestataire"] else search_type
    if search_type == "famille":
        FormClass = forms.FamilleSearchForm
        objects = Famille.objects.filter(compute_user_visibility_filters(request.user))
        template = "search/famille.html"
    else:
        FormClass = forms.PrestataireSearchForm
        objects = Prestataire.objects.filter(compute_user_visibility_filters(request.user))
        template = "search/prestataire.html"

    form = FormClass({"pc": data.get("postal_code")})

    if not settings.ALLOW_BASIC_PLAN_IN_SEARCH:
        objects = objects.filter(plan=UserInfo.PLANS["premium"])

    if data.get("postal_code"):
        objects = objects.filter(Q(postal_code=data["postal_code"]) | Q(city=data["postal_code"]))
    objects = objects.order_by("-updated_at")
    objects = [obj for obj in objects if obj.visibility_score_is_enough]

    total_search_results = len(objects)
    nb_search_results = min(settings.NB_SEARCH_RESULTS, total_search_results)
    objects = objects[:nb_search_results]
    result_template = get_result_template_from_user(request, search_type)
    return render(
        request, template,
        get_context(
            search_form=form, results=objects, result_template=result_template,
            nb_search_results=nb_search_results, ordering=form.ordering_dict,
            favorites=favorites, user=request.user, search_type=search_type,
            max_nb_search_results=settings.NB_SEARCH_RESULTS,
            total_search_results=total_search_results
        )
    )
Example #3
0
    def get_object_list(self, request):
        """
        Filter allowed object given the HTTP request.

        :param request:           the given HTTP request
        """
        filters = compute_user_visibility_filters(request.user)
        return super(SearchResource, self).get_object_list(request).filter(filters)