Ejemplo n.º 1
0
def render_publication_row(context, publication_slug):
    try:
        publication = Publication.objects.get(slug=publication_slug)
    except Publication.DoesNotExist:
        return u''
    else:
        user = context.get('user')
        # if not public => render only if saff user
        if publication.public or user.is_staff:
            edition = get_current_edition(publication)
            if edition:
                flatten_ctx = context.flatten()
                flatten_ctx.update(
                    {
                        'publication_obj': publication,
                        'edition': edition, 'is_portada': True,  # both should be set
                        # force a blank first node because top_index should be > 0
                        'publication_destacados': [None] + edition.top_articles[:4],
                    }
                )
                if hasattr(user, 'subscriber') and user.subscriber.is_subscriber(publication.slug):
                    flatten_ctx['publication_obj_is_subscriber'] = True
                return loader.render_to_string(
                    getattr(settings, 'HOMEV3_PUBLICATION_ROW_TEMPLATE', 'publication_row.html'), flatten_ctx
                )
            else:
                return u''
        else:
            return u''
Ejemplo n.º 2
0
 def render(self, context):
     try:
         category = Category.objects.get(slug=self.category_slug)
     except Category.DoesNotExist:
         return u''
     else:
         latest_articles = category.latest_articles()[:4]
         if latest_articles:
             flatten_ctx = context.flatten()
             flatten_ctx.update(
                 {
                     'category': category,
                     # both next entries should be set
                     'edition': get_current_edition(),
                     'is_portada': True,
                     # force a blank first node because top_index should be > 0
                     'category_destacados': [None] + latest_articles,
                 }
             )
             template = 'category_row.html'
             if category.slug in getattr(settings, 'HOMEV3_CATEGORIES_ROW_CUSTOM_TEMPLATES', ()):
                 template = '%s/row/%s.html' % (settings.CORE_CATEGORIES_TEMPLATE_DIR, category.slug)
             return loader.render_to_string(template, flatten_ctx)
         else:
             return u''
Ejemplo n.º 3
0
def rawpic_cover(request):
    edition = get_current_edition()
    if not edition:
        response = HttpResponse("No hay foto disponible!",
                                mimetype="text/plain")
    else:
        rawpic = open(edition.cover.path)
        response = HttpResponse(rawpic.read(), mimetype="image/jpeg")
    return response
Ejemplo n.º 4
0
def rawpic_cover(request):
    edition = get_current_edition()
    if not edition:
        raise Http404
    else:
        try:
            return HttpResponse(open(edition.cover.path).read(),
                                content_type="image/jpeg")
        except IOError:
            raise Http404
Ejemplo n.º 5
0
class HomeArticleViewSet(viewsets.ModelViewSet):
    try:
        edition = get_current_edition() or get_latest_edition()
    except Exception:
        edition = None
    pk_list = [a.id for a in edition.top_articles] if edition else []
    clauses = ' '.join(['WHEN id=%s THEN %s' % (pk, i) for i, pk in enumerate(pk_list)])
    ordering = 'CASE %s END' % clauses
    queryset = Article.objects.filter(id__in=pk_list).extra(select={'ordering': ordering}, order_by=('ordering', ))
    serializer_class = ArticleSerializer
    http_method_names = ['get', 'head']
    filter_fields = ('headline', 'sections')
Ejemplo n.º 6
0
 def items(self, obj):
     edition = get_current_edition()
     return Article.objects.filter(
         type=self.type, is_published=True,
         edition__id__lte=edition.id).order_by('-date_published')[:10]
Ejemplo n.º 7
0
 def items(self, obj):
     edition = get_current_edition()
     return obj.articles.filter(
         is_published=True,
         edition__id__lte=edition.id).order_by('-date_published')[:10]
Ejemplo n.º 8
0
 def items(self):
     edition = get_current_edition()
     query = Supplement.objects.filter(edition__id__lte=edition.id)[:10]
     result = query.exclude(public=False)
     return result
Ejemplo n.º 9
0
 def items(self):
     print('items')
     edition = get_current_edition()
     return Edition.objects.filter(id__lte=edition.id)[:10]
Ejemplo n.º 10
0
def index(request, year=None, month=None, day=None, domain_slug=None):
    """
    View to display the current edition page. Or the edition in the date and publication matching domain_slug.
    If domain_slug is a Category slug this view will return the matching category detail view.
    """

    if domain_slug:
        # if domain_slug is one of the "root url" publications => redirect to home (only if no edition date given)
        if domain_slug in settings.CORE_PUBLICATIONS_USE_ROOT_URL and not (
                year or month or day):
            return HttpResponsePermanentRedirect(reverse('home'))
        try:
            publication = Publication.objects.get(slug=domain_slug)
            # if not public => only allow staff members
            if not (publication.public or request.user.is_staff):
                raise Http404
        except Publication.DoesNotExist:
            # if domain_slug is an area slug (or a slug to redirect) => return area detail view
            category_redirections = getattr(settings, 'CORE_CATEGORY_REDIRECT',
                                            {})
            if domain_slug in category_redirections:
                # removed, changed or force-404 categories redirects by settings
                redirect_slug = category_redirections[domain_slug]
                if redirect_slug:
                    return HttpResponsePermanentRedirect(
                        reverse(
                            'home',
                            args=(settings.CORE_CATEGORY_REDIRECT[domain_slug],
                                  )))
                else:
                    raise Http404
            return category_detail(
                request,
                get_object_or_404(Category, slug=domain_slug).slug)
    else:
        publication = Publication.objects.get(slug=settings.DEFAULT_PUB)

    # Primer día desde el que se muestran ediciones.
    # TODO: explain better this setting
    first_day = getattr(settings, 'FIRST_DAY')

    edition = None
    publishing_hour, publishing_minute = [
        int(i) for i in settings.PUBLISHING_TIME.split(':')
    ]

    # Context variables for publication, featured publications, sections "grids" and "big photo".
    context = {
        'publication':
        publication,
        'featured_publications': [],
        'featured_sections':
        getattr(settings, 'HOMEV3_FEATURED_SECTIONS',
                {}).get(publication.slug, ()),
        'bigphoto_template':
        getattr(settings, 'HOMEV3_BIGPHOTO_TEMPLATE', 'bigphoto.html'),
    }

    is_authenticated = request.user.is_authenticated()
    if is_authenticated:
        context.update({
            'restricteds': [],
            'restricteds_allowed': [],
            'compute_follows': [],
            'follows': []
        })
        user_has_subscriber = hasattr(request.user, 'subscriber')
        follow_set = request.user.follow_set.filter(
            content_type=ContentType.objects.get_for_model(
                Article)).values_list('object_id', flat=True)

    for publication_slug in getattr(settings, 'HOMEV3_FEATURED_PUBLICATIONS',
                                    ()):
        try:
            ftop_articles = \
                get_current_edition(publication=Publication.objects.get(slug=publication_slug)).top_articles
            if ftop_articles:
                if is_authenticated:
                    ctx_update_article_extradata(context, request.user,
                                                 user_has_subscriber,
                                                 follow_set, ftop_articles)
                fcover_article = ftop_articles[0]
                ftop_articles.pop(0)
            else:
                fcover_article = None
        except Publication.DoesNotExist:
            pass
        else:
            context['featured_publications'].append(
                (publication_slug, ftop_articles, fcover_article))

    # Context variables for the featured category component
    featured_category_slug = getattr(settings, 'HOMEV3_FEATURED_CATEGORY',
                                     None)
    if featured_category_slug:
        category = get_object_or_404(Category, slug=featured_category_slug)
        category_home = get_object_or_404(CategoryHome, category=category)
        category_cover_article, category_destacados = category_home.cover(
        ), category_home.non_cover_articles()
        if is_authenticated:
            ctx_update_article_extradata(context, request.user,
                                         user_has_subscriber, follow_set,
                                         [category_cover_article])
            ctx_update_article_extradata(context, request.user,
                                         user_has_subscriber, follow_set,
                                         category_destacados)
        context.update({
            'fcategory': category,
            'category_cover_article': category_cover_article,
            'category_destacados': category_destacados,
        })

    questions_topic_slug = getattr(settings, 'HOMEV3_QUESTIONS_TOPIC_SLUG',
                                   None)
    if questions_topic_slug:
        question_list = Question.published.filter(
            topic__slug=questions_topic_slug)
        try:
            questions_topic = Topic.objects.get(slug=questions_topic_slug)
        except Topic.DoesNotExist:
            questions_topic = None
    else:
        question_list, questions_topic = [], None

    if publication.slug != settings.DEFAULT_PUB:
        if year and month and day:
            date_published = datetime(year=int(year),
                                      month=int(month),
                                      day=int(day),
                                      hour=publishing_hour,
                                      minute=publishing_minute)
            if first_day.date() > date_published.date():
                raise Http404
            if date_published >= datetime.now() and not request.user.is_staff:
                raise Http404
            edition = get_object_or_404(Edition,
                                        date_published=date_published,
                                        publication=publication)
        else:
            edition = get_current_edition(publication=publication)

        top_articles = edition.top_articles if edition else []

        context.update({
            'edition':
            edition,
            'mas_leidos':
            False,
            'allow_ads':
            getattr(settings, 'HOMEV3_NON_DEFAULT_PUB_ALLOW_ADS', True),
        })
        template = 'index_pubs.html'
    else:
        if year and month and day:
            date_published = datetime(year=int(year),
                                      month=int(month),
                                      day=int(day),
                                      hour=publishing_hour,
                                      minute=publishing_minute)
            if first_day.date() > date_published.date():
                raise Http404
            if date_published >= datetime.now() and not request.user.is_staff:
                raise Http404
            ld_edition = get_object_or_404(
                Edition,
                date_published=date_published,
                publication__slug__in=settings.CORE_PUBLICATIONS_USE_ROOT_URL)
        else:
            # get edition as usual
            ld_edition = get_current_edition()

        top_articles = ld_edition.top_articles if ld_edition else []

        try:
            context['event'] = LiveEmbedEvent.objects.get(active=True,
                                                          in_home=True)
        except LiveEmbedEvent.DoesNotExist:
            pass

        if settings.DEBUG:
            print(u'DEBUG: Default home page view called.')
        context.update({
            'edition': ld_edition,
            'mas_leidos': True,
            'allow_ads': True,
            'publications': Publication.objects.filter(public=True),
            'home_publications': settings.HOME_PUBLICATIONS,
        })
        template = 'index.html'

    if top_articles:

        if is_authenticated:
            ctx_update_article_extradata(context, request.user,
                                         user_has_subscriber, follow_set,
                                         top_articles)

        cover_article = top_articles[0]
        top_articles.pop(0)

    else:
        cover_article = None

    context.update({
        'is_portada': True,
        'cover_article': cover_article,
        'destacados': top_articles,
        'question_list': question_list,
        'questions_topic': questions_topic,
        'big_photo': publication.full_width_cover_image,
    })

    if publication.slug in getattr(settings,
                                   'CORE_PUBLICATIONS_CUSTOM_TEMPLATES', ()):
        template_dir = getattr(settings, 'CORE_PUBLICATIONS_TEMPLATE_DIR',
                               None)
        if template_dir:
            template = '%s/%s.html' % (template_dir, publication.slug)
    return render(request, template, context)
Ejemplo n.º 11
0
 def items(self):
     edition = get_current_edition()
     return Supplement.objects.filter(edition__id__lte=edition.id,
                                      public=True)[:10]
Ejemplo n.º 12
0
def index(request, year=None, month=None, day=None, domain_slug=None):
    """
    View to display the current edition page. Or the edition in the date and publication matching domain_slug.
    If domain_slug is a Category slug this view will return the matching category detail view.
    """

    if domain_slug:
        # if domain_slug is one of the "root url" publications => redirect to home
        if domain_slug in settings.CORE_PUBLICATIONS_USE_ROOT_URL:
            return HttpResponsePermanentRedirect(reverse('home'))
        try:
            publication = Publication.objects.get(slug=domain_slug)
            # if not public => only allow staff members
            if not (publication.public or request.user.is_staff):
                raise Http404
        except Publication.DoesNotExist:
            # if domain_slug is an area slug (or a slug to redirect) => return area detail view
            if domain_slug in getattr(settings, 'CORE_CATEGORY_REDIRECT', {}):
                # removed or changed categories redirects by settings
                return HttpResponsePermanentRedirect(
                    reverse('home', args=(settings.CORE_CATEGORY_REDIRECT[domain_slug], )))
            return category_detail(request, get_object_or_404(Category, slug=domain_slug).slug)
    else:
        publication = Publication.objects.get(slug=settings.DEFAULT_PUB)

    # Primer día desde el que se muestran ediciones.
    # TODO: explain better this setting
    first_day = getattr(settings, 'FIRST_DAY')

    edition = None
    publishing_hour, publishing_minute = [int(i) for i in settings.PUBLISHING_TIME.split(':')]

    # Context variables for featured publication "grids"
    context = {'publication': publication, 'featured_publications': []}
    for publication_slug in getattr(settings, 'HOMEV3_FEATURED_PUBLICATIONS', ()):
        try:
            ftop_articles = \
                get_current_edition(publication=Publication.objects.get(slug=publication_slug)).top_articles
            if ftop_articles:
                fcover_article = ftop_articles[0]
                ftop_articles.pop(0)
            else:
                fcover_article = None
        except Publication.DoesNotExist:
            pass
        else:
            context['featured_publications'].append((publication_slug, ftop_articles, fcover_article))

    # Context variables for the featured category component
    featured_category_slug = getattr(settings, 'HOMEV3_FEATURED_CATEGORY', None)
    if featured_category_slug:
        category = get_object_or_404(Category, slug=featured_category_slug)
        category_home = get_object_or_404(Home, category=category)
        cat_modules = category_home.modules.all()
        context.update({
            'fcategory': category, 'category_cover_article': category_home.cover,
            'category_destacados': cat_modules[0].articles_as_list if cat_modules else []})

    question_list = Question.published.filter(topic__slug='coronavirus')
    try:
        questions_topic = Topic.objects.get(slug="coronavirus")
    except Topic.DoesNotExist:
        questions_topic = None

    if publication.slug != settings.DEFAULT_PUB:
        if year and month and day:
            date_published = datetime(
                year=int(year), month=int(month), day=int(day), hour=publishing_hour, minute=publishing_minute)
            if first_day.date() > date_published.date():
                raise Http404
            if date_published >= datetime.now() and not request.user.is_staff:
                raise Http404
            edition = get_object_or_404(Edition, date_published=date_published, publication=publication)
        else:
            edition = get_current_edition(publication=publication)

        top_articles = edition.top_articles
        if top_articles:
            cover_article = top_articles[0]
            top_articles.pop(0)
        else:
            cover_article = None

        context.update({
            'cover_article': cover_article, 'edition': edition, 'destacados': top_articles, 'mas_leidos': False,
            'big_photo': publication.full_width_cover_image, 'is_portada': True, 'question_list': question_list,
            'questions_topic': questions_topic,
            'featured_sections': getattr(settings, 'HOMEV3_FEATURED_SECTIONS', {}).get(publication.slug, ())})
        return 'index_pubs.html', context
    else:
        if year and month and day:
            date_published = datetime(
                year=int(year), month=int(month), day=int(day), hour=publishing_hour, minute=publishing_minute)
            if first_day.date() > date_published.date():
                raise Http404
            if date_published >= datetime.now() and not request.user.is_staff:
                raise Http404
            ld_edition = get_object_or_404(
                Edition, date_published=date_published, publication__slug__in=settings.CORE_PUBLICATIONS_USE_ROOT_URL)
        else:
            # get edition as usual
            ld_edition = get_current_edition()

        top_articles = ld_edition.top_articles if ld_edition else []

        if top_articles:
            cover_article = top_articles[0]
            top_articles.pop(0)
        else:
            cover_article = None

        try:
            context['event'] = LiveEmbedEvent.objects.get(active=True, in_home=True)
        except LiveEmbedEvent.DoesNotExist:
            pass

        try:
            context['photo_section'] = Section.objects.get(slug='fotografia')
        except Section.DoesNotExist:
            pass

        if settings.DEBUG:
            print(u'DEBUG: Default home page view called.')
        context.update({
            'edition': ld_edition, 'destacados': top_articles, 'is_portada': True, 'cover_article': cover_article,
            'big_photo': publication.full_width_cover_image, 'mas_leidos': True,
            'publications': Publication.objects.filter(public=True), 'home_publications': settings.HOME_PUBLICATIONS,
            'question_list': question_list, 'questions_topic': questions_topic})
        return 'index.html', context