コード例 #1
0
ファイル: views.py プロジェクト: arturorc/opac
def collection_list_feed():
    language = session.get('lang', get_locale())
    collection = controllers.get_current_collection()

    title = 'SciELO - %s - %s' % (collection.name,
                                  _('Últimos periódicos inseridos na coleção'))
    subtitle = _('10 últimos periódicos inseridos na coleção %s' %
                 collection.name)

    feed = AtomFeed(title,
                    subtitle=subtitle,
                    feed_url=request.url,
                    url=request.url_root)

    journals = controllers.get_journals_paginated(title_query='',
                                                  page=1,
                                                  order_by='-created',
                                                  per_page=10)

    if not journals.items:
        feed.add('Nenhum periódico encontrado',
                 url=request.url,
                 updated=datetime.now())

    for journal in journals.items:
        issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
        last_issue = issues[0] if issues else None

        articles = []
        if last_issue:
            articles = controllers.get_articles_by_iid(last_issue.iid,
                                                       is_public=True)

        result_dict = OrderedDict()
        for article in articles:
            section = article.get_section_by_lang(language[:2])
            result_dict.setdefault(section, [])
            result_dict[section].append(article)

        context = {
            'journal': journal,
            'articles': result_dict,
            'language': language,
            'last_issue': last_issue
        }

        feed.add(journal.title,
                 render_template("collection/list_feed_content.html",
                                 **context),
                 content_type='html',
                 author=journal.publisher_name,
                 url=url_external('main.journal_detail',
                                  url_seg=journal.url_segment),
                 updated=journal.updated,
                 published=journal.created)

    return feed.get_response()
コード例 #2
0
    def test_get_issues_by_jid_with_unknow_ids(self):
        """
        Teste da função controllers.get_issue_by_jid() com um jid desconhecido,
        deve retornar um None.
        """

        issues = controllers.get_issues_by_jid('02i28wjs92u')

        self.assertIsNone(issues)
コード例 #3
0
ファイル: test_controller.py プロジェクト: scieloorg/opac
    def test_get_issues_by_jid_with_unknow_ids(self):
        """
        Teste da função controllers.get_issue_by_jid() com um jid desconhecido,
        deve retornar um None.
        """

        issues = controllers.get_issues_by_jid('02i28wjs92u')

        self.assertIsNone(issues)
コード例 #4
0
    def test_get_issues_by_jid(self):
        """
        Teste da função controllers.get_issue_by_jid() para retornar um objeto:
        ``Issue``.
        """

        issue = self._make_one()

        self.assertEqual(controllers.get_issues_by_jid(issue.journal.id)[0].id,
                         issue.id)
コード例 #5
0
ファイル: test_controller.py プロジェクト: scieloorg/opac
    def test_get_issues_by_jid(self):
        """
        Teste da função controllers.get_issue_by_jid() para retornar um objeto:
        ``Issue``.
        """

        issue = self._makeOne()

        self.assertEqual(controllers.get_issues_by_jid(issue.journal.id)[0].id,
                         issue.id)
コード例 #6
0
ファイル: views.py プロジェクト: scieloorg/opac
def issue_toc(url_seg, url_seg_issue):
    default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE')
    section_filter = request.args.get('section', '', type=str)

    if not session.get('lang'):
        lang = default_lang
    else:
        lang = session.get('lang')[:2]

    issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue)

    if not issue:
        abort(404, _('Fascículo não encontrado'))

    if not issue.is_public:
        abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason))

    if not issue.journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason))

    journal = issue.journal
    articles = controllers.get_articles_by_iid(issue.iid, is_public=True)

    if articles:
        sections = list(articles.item_frequencies('section').keys())
        sections = sorted([k for k in sections if k is not None])
    else:
        sections = []

    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    if section_filter != '':
        articles = articles.filter(section__iexact=section_filter)

    issue_list = [_issue for _issue in issues]

    previous_issue = utils.get_prev_issue(issue_list, issue)
    next_issue = utils.get_next_issue(issue_list, issue)

    context = {
                'next_issue': next_issue,
                'previous_issue': previous_issue,
                'journal': journal,
                'issue': issue,
                'articles': articles,
                'sections': sections,
                'section_filter': section_filter,
                # o primiero item da lista é o último fascículo.
                'last_issue': issues[0] if issues else None
               }

    return render_template("issue/toc.html", **context)
コード例 #7
0
ファイル: views.py プロジェクト: arturorc/opac
def about_journal(url_seg):
    language = session.get('lang', get_locale())

    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    latest_issue = issues[0] if issues else None

    if latest_issue:
        latest_issue_legend = descriptive_short_format(
            title=latest_issue.journal.title,
            short_title=latest_issue.journal.short_title,
            pubdate=str(latest_issue.year),
            volume=latest_issue.volume,
            number=latest_issue.number,
            suppl=latest_issue.suppl_text,
            language=language[:2].lower())
    else:
        latest_issue_legend = None

    # A lista de números deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    page = controllers.get_page_by_journal_acron_lang(journal.acronym,
                                                      language)

    context = {
        'next_issue': None,
        'previous_issue': previous_issue,
        'journal': journal,
        'latest_issue_legend': latest_issue_legend,
        'last_issue': latest_issue,
    }

    if page:
        context['content'] = page.content
        if page.updated_at:
            context['page_updated_at'] = page.updated_at

    return render_template("journal/about.html", **context)
コード例 #8
0
ファイル: views.py プロジェクト: jamilatta/opac
def issue_toc(url_seg, url_seg_issue):
    default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE")
    section_filter = request.args.get("section", "", type=unicode)

    if not session.get("lang"):
        lang = default_lang
    else:
        lang = session.get("lang")[:2]

    issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue)

    if not issue:
        abort(404, _("Fascículo não encontrado"))

    if not issue.is_public:
        abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason))

    if not issue.journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason))

    journal = issue.journal
    articles = controllers.get_articles_by_iid(issue.iid, is_public=True)

    if articles:
        sections = sorted(articles.item_frequencies("section").keys())
    else:
        sections = []

    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    if section_filter != "":
        articles = articles.filter(section__iexact=section_filter)

    issue_list = [_issue for _issue in issues]

    previous_issue = utils.get_prev_issue(issue_list, issue)
    next_issue = utils.get_next_issue(issue_list, issue)

    context = {
        "next_issue": next_issue,
        "previous_issue": previous_issue,
        "journal": journal,
        "issue": issue,
        "articles": articles,
        "sections": sections,
        "section_filter": section_filter,
        # o primiero item da lista é o último fascículo.
        "last_issue": issues[0] if issues else None,
    }

    return render_template("issue/toc.html", **context)
コード例 #9
0
ファイル: views.py プロジェクト: scieloorg/opac
def collection_list_feed():
    default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE')
    language = session.get('lang', default_lang) or default_lang
    collection = controllers.get_current_collection()

    title = 'SciELO - %s - %s' % (collection.name, _('Últimos periódicos inseridos na coleção'))
    subtitle = _('10 últimos periódicos inseridos na coleção %s' % collection.name)

    feed = AtomFeed(title,
                    subtitle=subtitle,
                    feed_url=request.url, url=request.url_root)

    journals = controllers.get_journals_paginated(
        title_query='', page=1, order_by='-created', per_page=10)

    if not journals.items:
        feed.add('Nenhum periódico encontrado',
                 url=request.url,
                 updated=datetime.now())

    for journal in journals.items:
        issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
        last_issue = issues[0] if issues else None

        articles = []
        if last_issue:
            articles = controllers.get_articles_by_iid(last_issue.iid,
                                                       is_public=True)

        result_dict = OrderedDict()
        for article in articles:
            section = article.get_section_by_lang(language[:2])
            result_dict.setdefault(section, [])
            result_dict[section].append(article)

        context = {
            'journal': journal,
            'articles': result_dict,
            'language': language,
            'last_issue': last_issue
        }

        feed.add(journal.title,
                 render_template("collection/list_feed_content.html", **context),
                 content_type='html',
                 author=journal.publisher_name,
                 url=url_external('main.journal_detail', url_seg=journal.url_segment),
                 updated=journal.updated,
                 published=journal.created)

    return feed.get_response()
コード例 #10
0
ファイル: views.py プロジェクト: jamilatta/opac
def collection_list_feed():
    default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE")
    language = session.get("lang", default_lang) or default_lang
    collection = controllers.get_current_collection()

    title = "SciELO - %s - %s" % (collection.name, _("Últimos periódicos inseridos na coleção"))
    subtitle = _("10 últimos periódicos inseridos na coleção %s" % collection.name)

    feed = AtomFeed(
        title,
        subtitle=subtitle,
        logo=utils.get_resources_url(g.collection.logo_resource, "img", language),
        feed_url=request.url,
        url=request.url_root,
    )

    journals = controllers.get_journals_paginated(title_query="", page=1, order_by="-created", per_page=10)

    if not journals.items:
        feed.add("Nenhum periódico encontrado", url=request.url, updated=datetime.now())

    for journal in journals.items:
        issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
        last_issue = issues[0] if issues else None

        articles = []
        if last_issue:
            articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True)

        result_dict = OrderedDict()
        for article in articles:
            section = article.get_section_by_lang(language[:2])
            result_dict.setdefault(section, [])
            result_dict[section].append(article)

        context = {"journal": journal, "articles": result_dict, "language": language, "last_issue": last_issue}

        feed.add(
            journal.title,
            render_template("collection/list_feed_content.html", **context),
            content_type="html",
            author=journal.publisher_name,
            url=url_external("main.journal_detail", url_seg=journal.url_segment),
            updated=journal.updated,
            published=journal.created,
        )

    return feed.get_response()
コード例 #11
0
ファイル: views.py プロジェクト: scieloorg/opac
def journal_detail(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # todo: ajustar para que seja só noticias relacionadas ao periódico
    default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE')
    language = session.get('lang', default_lang)
    news = controllers.get_latest_news_by_lang(language)

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    # A lista de fascículos deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    # Press releases
    press_releases = controllers.get_press_releases({'journal': journal,
                                                     'language': language})

    # Lista de seções
    # Mantendo sempre o idioma inglês para as seções na página incial do periódico
    if journal.last_issue:
        sections = [section for section in journal.last_issue.sections if section.language == 'en']
    else:
        sections = []

    context = {
        'next_issue': None,
        'previous_issue': previous_issue,
        'journal': journal,
        'press_releases': press_releases,
        # o primiero item da lista é o último fascículo.
        # condicional para verificar se issues contém itens
        'last_issue': issues[0] if issues else None,
        'sections': sections if sections else None,
        'news': news
    }

    return render_template("journal/detail.html", **context)
コード例 #12
0
    def test_get_issues_by_jid_with_many_items(self):
        """
        Teste da função controllers.get_issue_by_jid() com vários itens, deve
        deve retorna uma lista.
        """

        journal = utils.makeOneJournal()

        self._make_one({'_id': '1', 'journal': journal.id})
        self._make_one({'_id': '2', 'journal': journal.id})
        self._make_one({'_id': '3', 'journal': journal.id})
        self._make_one({'_id': '4', 'journal': journal.id})

        issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id)]

        self.assertListEqual(sorted(issues), sorted(['1', '2', '3', '4']))
コード例 #13
0
ファイル: test_controller.py プロジェクト: scieloorg/opac
    def test_get_issues_by_jid_with_many_items(self):
        """
        Teste da função controllers.get_issue_by_jid() com vários itens, deve
        deve retorna uma lista.
        """

        journal = utils.makeOneJournal()

        self._makeOne({'_id': '1', 'journal': journal.id})
        self._makeOne({'_id': '2', 'journal': journal.id})
        self._makeOne({'_id': '3', 'journal': journal.id})
        self._makeOne({'_id': '4', 'journal': journal.id})

        issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id)]

        self.assertListEqual(sorted(issues), sorted(['1', '2', '3', '4']))
コード例 #14
0
ファイル: test_controller.py プロジェクト: scieloorg/opac
    def test_get_issues_by_jid_changing_default_order_by(self):
        """
        Teste da função controllers.get_issue_by_jid() com vários itens, deve
        deve retorna uma lista considerando o valor explicito do atributo
        ``order_by``
        """

        journal = utils.makeOneJournal()

        self._makeOne({'_id': '1', 'journal': journal.id, 'number': '10'})
        self._makeOne({'_id': '2', 'journal': journal.id, 'number': '9'})
        self._makeOne({'_id': '3', 'journal': journal.id, 'number': '8'})
        self._makeOne({'_id': '4', 'journal': journal.id, 'number': '7'})

        issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id, order_by=['number'])]

        self.assertListEqual(sorted(issues), sorted(['4', '3', '2', '1']))
コード例 #15
0
    def test_get_issues_by_jid_changing_default_order_by(self):
        """
        Teste da função controllers.get_issue_by_jid() com vários itens, deve
        deve retorna uma lista considerando o valor explicito do atributo
        ``order_by``
        """

        journal = utils.makeOneJournal()

        self._make_one({'_id': '1', 'journal': journal.id, 'number': '10'})
        self._make_one({'_id': '2', 'journal': journal.id, 'number': '9'})
        self._make_one({'_id': '3', 'journal': journal.id, 'number': '8'})
        self._make_one({'_id': '4', 'journal': journal.id, 'number': '7'})

        issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id, order_by=['number'])]

        self.assertListEqual(sorted(issues), sorted(['4', '3', '2', '1']))
コード例 #16
0
ファイル: views.py プロジェクト: scieloorg/opac
def journal_feed(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
    last_issue = issues[0] if issues else None
    articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True)

    feed = AtomFeed(journal.title,
                    feed_url=request.url,
                    url=request.url_root,
                    subtitle=utils.get_label_issue(last_issue))

    # ######### TODO: Revisar/Melhorar/Consertar #########
    try:
        feed_language = session['lang'][:2].lower()
    except Exception as e:
        feed_language = 'pt'

    for article in articles:

        # ######### TODO: Revisar #########
        article_lang = feed_language
        if feed_language not in article.languages:
            article_lang = article.original_language

        feed.add(article.title or 'NO TITLE',
                 render_template("issue/feed_content.html", article=article),
                 content_type='html',
                 author=article.authors,
                 url=url_external('main.article_detail',
                                  url_seg=journal.url_segment,
                                  url_seg_issue=last_issue.url_segment,
                                  url_seg_article=article.url_segment,
                                  lang_code=article_lang),
                 updated=journal.updated,
                 published=journal.created)

    return feed.get_response()
コード例 #17
0
def journal_feed(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
    last_issue = issues[0] if issues else None
    articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True)

    feed = AtomFeed(journal.title,
                    feed_url=request.url,
                    url=request.url_root,
                    subtitle=utils.get_label_issue(last_issue))

    feed_language = session.get('lang', get_locale())
    feed_language = feed_language[:2].lower()

    for article in articles:

        # ######### TODO: Revisar #########
        article_lang = feed_language
        if feed_language not in article.languages:
            article_lang = article.original_language

        feed.add(article.title or _('Artigo sem título'),
                 render_template("issue/feed_content.html", article=article),
                 content_type='html',
                 id=article.doi or article.pid,
                 author=article.authors,
                 url=url_external('main.article_detail',
                                  url_seg=journal.url_segment,
                                  url_seg_issue=last_issue.url_segment,
                                  url_seg_article=article.url_segment,
                                  lang_code=article_lang),
                 updated=journal.updated,
                 published=journal.created)

    return feed.get_response()
コード例 #18
0
ファイル: views.py プロジェクト: jamilatta/opac
def journal_detail(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _("Periódico não encontrado"))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # todo: ajustar para que seja só noticias relacionadas ao periódico
    default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE")
    language = session.get("lang", default_lang)
    news = controllers.get_latest_news_by_lang(language)

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    # A lista de fascículos deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    # Get press releases
    press_releases = controllers.get_press_releases({"journal": journal, "language": language})

    context = {
        "next_issue": None,
        "previous_issue": previous_issue,
        "journal": journal,
        "press_releases": press_releases,
        # o primiero item da lista é o último fascículo.
        # condicional para verificar se issues contém itens
        "last_issue": issues[0] if issues else None,
        "news": news,
    }

    return render_template("journal/detail.html", **context)
コード例 #19
0
ファイル: views.py プロジェクト: jamilatta/opac
def journal_feed(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _("Periódico não encontrado"))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    issues = controllers.get_issues_by_jid(journal.jid, is_public=True)
    last_issue = issues[0] if issues else None
    articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True)

    feed = AtomFeed(
        journal.title, feed_url=request.url, url=request.url_root, subtitle=utils.get_label_issue(last_issue)
    )

    # ######### TODO: Revisar/Melhorar/Consertar #########
    try:
        feed_language = session["lang"][:2].lower()
    except Exception, e:
        feed_language = "pt"
コード例 #20
0
ファイル: views.py プロジェクト: joffilyfe/opac
def about_journal(url_seg):
    language = session.get('lang', get_locale())

    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    # A lista de números deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    page = controllers.get_page_by_journal_acron_lang(journal.acronym, language)

    context = {
        'next_issue': None,
        'previous_issue': previous_issue,
        'journal': journal,
        # o primiero item da lista é o último número.
        # condicional para verificar se issues contém itens
        'last_issue': issues[0] if issues else None,
    }

    if page:
        context['content'] = page.content
        if page.updated_at:
            context['page_updated_at'] = page.updated_at

    return render_template("journal/about.html", **context)
コード例 #21
0
ファイル: views.py プロジェクト: jamilatta/opac
def about_journal(url_seg):
    default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE")
    language = session.get("lang", default_lang) or default_lang

    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _("Periódico não encontrado"))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    # A lista de fascículos deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    page = controllers.get_page_by_journal_acron_lang(journal.acronym, language)

    context = {
        "next_issue": None,
        "previous_issue": previous_issue,
        "journal": journal,
        # o primiero item da lista é o último fascículo.
        # condicional para verificar se issues contém itens
        "last_issue": issues[0] if issues else None,
    }

    if page:
        context["content"] = page.content

    return render_template("journal/about.html", **context)
コード例 #22
0
ファイル: views.py プロジェクト: arturorc/opac
def issue_toc(url_seg, url_seg_issue):
    # idioma da sessão
    language = session.get('lang', get_locale())

    section_filter = request.args.get('section', '', type=str)

    issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue)

    if issue and issue.journal:
        issue_legend = descriptive_short_format(
            title=issue.journal.title,
            short_title=issue.journal.short_title,
            pubdate=str(issue.year),
            volume=issue.volume,
            number=issue.number,
            suppl=issue.suppl_text,
            language=language[:2].lower())

    if not issue:
        abort(404, _('Número não encontrado'))

    if not issue.is_public:
        abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason))

    if not issue.journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason))

    journal = issue.journal
    articles = controllers.get_articles_by_iid(issue.iid, is_public=True)

    if articles:
        sections = list(articles.item_frequencies('section').keys())
        sections = sorted([k for k in sections if k is not None])
    else:
        sections = []

    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    if section_filter != '':
        articles = articles.filter(section__iexact=section_filter)

    issue_list = [_issue for _issue in issues]

    previous_issue = utils.get_prev_issue(issue_list, issue)
    next_issue = utils.get_next_issue(issue_list, issue)

    for article in articles:
        article_text_languages = [doc['lang'] for doc in article.htmls]
        article_pdf_languages = [(doc['lang'], doc['url'])
                                 for doc in article.pdfs]

        setattr(article, "article_text_languages", article_text_languages)
        setattr(article, "article_pdf_languages", article_pdf_languages)

    context = {
        'next_issue': next_issue,
        'previous_issue': previous_issue,
        'journal': journal,
        'issue': issue,
        'issue_legend': issue_legend,
        'articles': articles,
        'sections': sections,
        'section_filter': section_filter,
        # o primiero item da lista é o último número.
        'last_issue': issues[0] if issues else None
    }

    return render_template("issue/toc.html", **context)
コード例 #23
0
ファイル: views.py プロジェクト: arturorc/opac
def journal_detail(url_seg):
    journal = controllers.get_journal_by_url_seg(url_seg)

    if not journal:
        abort(404, _('Periódico não encontrado'))

    if not journal.is_public:
        abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason))

    # todo: ajustar para que seja só noticias relacionadas ao periódico
    language = session.get('lang', get_locale())
    news = controllers.get_latest_news_by_lang(language)

    # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order"
    issues = controllers.get_issues_by_jid(journal.id, is_public=True)

    # A lista de números deve ter mais do que 1 item para que possamos tem
    # anterior e próximo
    if len(issues) >= 2:
        previous_issue = issues[1]
    else:
        previous_issue = None

    # Press releases
    press_releases = controllers.get_press_releases({
        'journal': journal,
        'language': language
    })

    # Lista de seções
    # Mantendo sempre o idioma inglês para as seções na página incial do periódico
    if journal.last_issue and journal.current_status == "current":
        sections = [
            section for section in journal.last_issue.sections
            if section.language == 'en'
        ]
        recent_articles = controllers.get_recent_articles_of_issue(
            journal.last_issue.iid, is_public=True)
    else:
        sections = []
        recent_articles = []

    if len(issues) > 0:
        latest_issue = issues[0]
        latest_issue_legend = descriptive_short_format(
            title=latest_issue.journal.title,
            short_title=latest_issue.journal.short_title,
            pubdate=str(latest_issue.year),
            volume=latest_issue.volume,
            number=latest_issue.number,
            suppl=latest_issue.suppl_text,
            language=language[:2].lower())
    else:
        latest_issue = None
        latest_issue_legend = ''

    context = {
        'next_issue':
        None,
        'previous_issue':
        previous_issue,
        'journal':
        journal,
        'press_releases':
        press_releases,
        'recent_articles':
        recent_articles,
        'journal_study_areas': [
            STUDY_AREAS.get(study_area.upper())
            for study_area in journal.study_areas
        ],
        # o primiero item da lista é o último número.
        # condicional para verificar se issues contém itens
        'last_issue':
        latest_issue,
        'latest_issue_legend':
        latest_issue_legend,
        'sections':
        sections if sections else None,
        'news':
        news
    }

    return render_template("journal/detail.html", **context)