예제 #1
0
def event_list(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    ancestors = list(page.ancestors().reverse())

    event_list = event_list_for_page(page)

    if "section" in request.GET:
        event_list = event_list.filter(section__slug=request.GET["section"])

    return render_list(
        request,
        event_list,
        {
            "location_list":
            Location.objects.filter(event__in=event_list, ).distinct(),
            "page":
            page,
            "header_image":
            page.get_header_image(),
            "vapid_public_key":
            settings.VAPID_PUBLIC_KEY,
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
        paginate_by=12,
    )
예제 #2
0
def unsubscribe_from_webpush(request):
    data = json.loads(request.body)
    page = page_for_app_request(request)
    Subscription.objects.filter(
        page=page, subscription_info__endpoint=data["endpoint"]).delete()

    return JsonResponse({"unsubscribed": True})
예제 #3
0
def event_list_for_section(request, pk):
    page = page_for_app_request(request)
    page.activate_language(request)

    section = get_object_or_404(Section, pk)

    event_list = event_list_for_page(page)

    event_list = event_list.filter(section=section)

    ancestors = list(page.ancestors().reverse())

    return render_list(
        request,
        event_list_for_page(page),
        {
            "page":
            page,
            "header_image":
            page.get_header_image(),
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
            "section":
            section,
        },
        paginate_by=20,
    )
예제 #4
0
def team_detail(request, pk):
    page = page_for_app_request(request)
    page.activate_language(request)

    team = get_object_or_404(Team, pk=pk)

    ancestors = list(page.ancestors().reverse())

    return render(
        request,
        "people/team_detail.html",
        {
            "page":
            page,
            "team":
            team,
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
    )
예제 #5
0
def teams_for_section(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    section = page.site.section
    ancestors = list(page.ancestors().reverse())

    return render_list(
        request,
        Team.objects.filter(
            section=section,
            language_code=page.language_code,
        ),
        {
            "page":
            page,
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
        paginate_by=10,
    )
예제 #6
0
def create(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    campaign = page.campaign

    form = TestimonialForm(campaign=campaign)

    if request.POST:
        form = TestimonialForm(request.POST, request.FILES, campaign=campaign)

        if form.is_valid():
            form.save()
            return redirect(reverse_app(f"testimonials-{campaign.pk}",
                                        "index"))

    return render(
        request,
        page.template_key,
        {
            "form":
            form,
            "campaign":
            campaign,
            "page":
            page,
            "regions":
            Regions.from_item(
                page,
                renderer=renderer,
                timeout=60,
                inherit_from=page.ancestors().reverse(),
            ),
        },
    )
예제 #7
0
def article_detail(request, slug):
    page = page_for_app_request(request)
    page.activate_language(request)
    ancestors = list(page.ancestors().reverse())

    article = get_object_or_404(Article,
                                slug=slug,
                                namespace=page.namespace,
                                language_code=page.language_code)
    return render(
        request, 'blog/article_detail.html', {
            'page':
            page,
            'title':
            article.title,
            'article':
            article,
            "meta_tags":
            meta_tags([article, page] + ancestors, request=request),
            "blog_regions":
            Regions.from_item(article, renderer=renderer, timeout=60),
            "regions":
            Regions.from_item(page,
                              renderer=cms_renderer,
                              timeout=60,
                              inherit_from=ancestors),
        })
예제 #8
0
def article_detail(request, slug):
    page = page_for_app_request(request)
    page.activate_language(request)

    article = get_object_or_404(articles_for_page(page, allow_future=True), slug=slug)

    ancestors = list(page.ancestors().reverse())
    edit = (
        request.user.is_authenticated
        and request.user.section_set.filter(pk=article.section.pk).exists()
    )

    return render(
        request,
        article.template.template_name,
        {
            "page": page,
            "article": article,
            "obj": article,
            "edit": edit,
            "header_image": article.get_header_image() or page.get_header_image(),
            "title": article.title,
            "meta_tags": meta_tags([article, page] + ancestors, request=request),
            "regions": Regions.from_item(article, renderer=renderer, timeout=60,),
            "page_regions": Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
    )
예제 #9
0
def article_detail(request, pk):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_detail(
        request,
        get_object_or_404(Article, pk=pk),
        {'page': page},
    )
예제 #10
0
def article_list_all(request):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_list(
        request,
        Article.objects.filter(category=page.application),
        {'page': page},
    )
예제 #11
0
def article_list(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    article_list = articles_for_page(page)
    category_list = Category.objects.filter(article__in=article_list).distinct()

    if request.GET.get("category", None):
        article_list = article_list.filter(
            category__slug__in=request.GET.getlist("category")
        )

    q = ""

    if request.GET.get("search", ""):
        vector = (
            SearchVector("title", weight="A")
            + SearchVector("category__name", weight="A")
            + SearchVector("blog_richtext_set__text", weight="A")
            + SearchVector("blog_glossaryrichtext_set__text", weight="A")
            + SearchVector("author__first_name", weight="B")
            + SearchVector("author__last_name", weight="B")
        )
        query = consume(request.GET["search"])
        q = request.GET["search"]
        article_list = (
            article_list.annotate(
                rank=SearchRank(vector, query, cover_density=True),
                headline=SearchHeadline(
                    'blog_richtext_set__text',
                    query,
                    max_words=25,
                    min_words=20,
                    max_fragments=2,
                )
            )
            .filter(rank__gt=0)
            .order_by("-rank")
            .distinct()
        )

    ancestors = list(page.ancestors().reverse())
    return render_list(
        request,
        article_list,
        {
            "page": page,
            "q": q,
            "header_image": page.get_header_image(),
            "vapid_public_key": settings.VAPID_PUBLIC_KEY,
            "category_list": category_list,
            "meta_tags": meta_tags([page] + ancestors, request=request),
            "regions": Regions.from_item(
                page, renderer=pages.renderer.renderer, timeout=60,
            ),
        },
        paginate_by=12,
    )
예제 #12
0
def is_subscribed(request):
    data = json.loads(request.body)
    return JsonResponse({
        "subscribed":
        Subscription.objects.filter(
            page=page_for_app_request(request),
            subscription_info__endpoint=data["endpoint"],
        ).exists()
    })
예제 #13
0
def subscribe_to_webpush(request):
    data = json.loads(request.body)
    page = page_for_app_request(request)
    if Subscription.objects.filter(
            page=page, subscription_info__endpoint=data["endpoint"]).exists():
        return JsonResponse({"subscribed": False})

    Subscription.objects.create(page=page, subscription_info=data)

    return JsonResponse({"subscribed": True})
예제 #14
0
def article_list(request):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_list(
        request,
        # Only show articles for the current app.
        Article.objects.published().filter(
            category=page.application, ).prefetch_related('images'),
        {'page': page},
        paginate_by=10,
    )
예제 #15
0
def collection_view(request):
    page = page_for_app_request(request)
    collection = page.collection

    ancestors = list(page.ancestors().reverse())

    return render(
        request, 'link_collections/collection.html', {
            'meta_tags': meta_tags([page] + ancestors, request=request),
            'page': page,
            'collection': collection,
        })
예제 #16
0
def article_list(request):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_list(
        request,
        # Only show articles for the current app.
        Article.objects.published().filter(
            category=page.application,
        ).prefetch_related('images'),
        {'page': page},
        paginate_by=10,
    )
예제 #17
0
def event_detail(request, year, month, day, slug):
    page = page_for_app_request(request)
    page.activate_language(request)

    event = get_object_or_404(
        event_list_for_page(page, past_events=True),
        slug=slug,
        section=page.site.section,
        start_date__year=year,
        start_date__month=month,
        start_date__day=day,
    )

    ancestors = list(page.ancestors().reverse())

    return render(
        request,
        event.template.template_name,
        {
            "page":
            page,
            "event":
            event,
            "obj":
            event,
            "header_image":
            event.get_header_image() or page.get_header_image(),
            "title":
            event.title,
            "meta_tags":
            meta_tags(
                [event, page] + ancestors,
                request=request,
            ),
            "regions":
            Regions.from_item(
                event,
                renderer=renderer,
                timeout=60,
            ),
            "page_regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
    )
예제 #18
0
def collection_view(request):
    page = page_for_app_request(request)
    collection = page.collection

    ancestors = list(page.ancestors().reverse())

    return render(
        request,
        "link_collections/collection.html",
        {
            "meta_tags": meta_tags([page] + ancestors, request=request),
            "page": page,
            "collection": collection,
        },
    )
예제 #19
0
def article_detail(request, year, slug):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_detail(
        request,
        # We are NOT filtering for the current app. If, for example, the
        # blog application is inactive, we'd rather show the article in
        # the publication app than not at all. Of course if this behavior
        # isn't a good fit for you, simply add ``category=page.application``
        # here.
        get_object_or_404(
            Article.objects.published(),
            publication_date__year=year,
            slug=slug,
        ),
        {'page': page},
    )
예제 #20
0
def article_detail(request, year, slug):
    page = page_for_app_request(request)
    page.activate_language(request)
    return render_detail(
        request,
        # We are NOT filtering for the current app. If, for example, the
        # blog application is inactive, we'd rather show the article in
        # the publication app than not at all. Of course if this behavior
        # isn't a good fit for you, simply add ``category=page.application``
        # here.
        get_object_or_404(
            Article.objects.published(),
            publication_date__year=year,
            slug=slug,
        ),
        {'page': page},
    )
예제 #21
0
def person_detail(request, pk):
    page = page_for_app_request(request)
    page.activate_language(request)

    person = get_object_or_404(Person, pk=pk)

    articles = Article.objects.filter(author=person)

    memberships = person.membership_set.filter(
        team__language_code=page.language_code)

    ancestors = list(page.ancestors().reverse())

    return render(
        request,
        "people/person_detail.html",
        {
            "page":
            page,
            "person":
            person,
            "memberships":
            memberships,
            "articles":
            articles,
            "header_image":
            page.get_header_image(),
            "title":
            person.get_full_name(),
            "meta_tags":
            meta_tags(
                [page] + ancestors,
                request=request,
                title=person.get_full_name(),
                description=person.description(),
            ),
            "regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
    )
예제 #22
0
def event_list_ical(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    ancestors = list(page.ancestors().reverse())

    event_list = event_list_for_page(page)

    if "section" in request.GET:
        event_list = event_list.filter(section__slug=request.GET["section"])

    event_list = event_list[:int(request.GET.get("limit", "30"))]

    calendar = ical_calendar(event_list)

    response = HttpResponse(calendar, content_type="text/ical")

    return response
예제 #23
0
def location_detail(request, slug):
    page = page_for_app_request(request)
    page.activate_language(request)

    location = get_object_or_404(Location.objects.all(), slug=slug)
    ancestors = list(page.ancestors().reverse())

    return render(
        request,
        "events/location_detail.html",
        {
            "page":
            page,
            "location":
            location,
            "obj":
            location,
            "title":
            location.name,
            "header_image":
            location.header_image or page.get_header_image(),
            "event_list":
            location.event_set.filter(end_date__gte=timezone.now(), ),
            "meta_tags":
            meta_tags([location, page] + ancestors, request=request),
            "regions":
            Regions.from_item(
                location,
                renderer=location_renderer,
                timeout=60,
            ),
            "page_regions":
            Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
    )
예제 #24
0
def glossary(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    ancestors = list(page.ancestors().reverse())

    entries = Entry.objects.filter(language_code=page.language_code)
    q = ""

    if "search" in request.GET and request.GET["search"]:
        vector = SearchVector("name", weight="A") + SearchVector("content", weight="B")
        query = consume(request.GET["search"])
        print(query)
        q = request.GET["search"]
        print(q)

        entries = (
            entries.annotate(rank=SearchRank(vector, query))
            .filter(rank__gte=0.1)
            .order_by("-rank")
        )

    return render_list(
        request,
        entries,
        {
            "page": page,
            "meta_tags": meta_tags([page] + ancestors, request=request),
            "header_image": page.get_header_image(),
            "regions": Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
            "search": q,
        },
        paginate_by=50,
    )
예제 #25
0
def article_list(request):
    page = page_for_app_request(request)

    page.activate_language(request)
    ancestors = list(page.ancestors().reverse())

    article_list = Article.objects.filter(namespace=page.namespace,
                                          publication_date__lte=timezone.now())

    return render_list(
        request, article_list, {
            'page':
            page,
            'article_list':
            article_list,
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "regions":
            Regions.from_item(page,
                              renderer=cms_renderer,
                              timeout=60,
                              inherit_from=ancestors),
        })
예제 #26
0
def index(request):
    page = page_for_app_request(request)
    page.activate_language(request)

    campaign = page.campaign
    testimonials = campaign.testimonial_set.filter(public=True, validated=True)

    create_url = reverse_app(f"testimonials-{campaign.pk}", "create")

    paginator = Paginator(testimonials, 27)
    page_number = request.GET.get("page", 1)
    page_obj = paginator.get_page(page_number)

    ancestors = list(page.ancestors().reverse())
    return render(
        request,
        page.template_key,
        {
            "campaign":
            campaign,
            "page_obj":
            page_obj,
            "page":
            page,
            "meta_tags":
            meta_tags([page] + ancestors, request=request),
            "create_url":
            create_url,
            "regions":
            Regions.from_item(
                page,
                renderer=renderer,
                timeout=60,
                inherit_from=page.ancestors().reverse(),
            ),
        },
    )
예제 #27
0
def category_list(request, slug):
    page = page_for_app_request(request)
    page.activate_language(request)

    articles = articles_for_page(page).filter(category__slug=slug)

    ancestors = list(page.ancestors().reverse())

    return render_list(
        request,
        articles,
        {
            "page": page,
            "header_image": page.get_header_image(),
            "meta_tags": meta_tags([page] + ancestors, request=request),
            "regions": Regions.from_item(
                page,
                renderer=pages.renderer.renderer,
                timeout=60,
                inherit_from=ancestors,
            ),
        },
        paginate_by=10,
    )
예제 #28
0
 def get_object(self, request, *args, **kwargs):
     page = page_for_app_request(request)
     page.activate_language(request)
     self.limit = int(request.GET.get("limit", "30"))
     return page