Exemple #1
0
def submit_info(request, article_id):
    """
    Presents a form for the user to complete with article information
    :param request: HttpRequest object
    :param article_id: Article PK
    :return: HttpResponse or HttpRedirect
    """
    article = get_object_or_404(models.Article, pk=article_id)
    additional_fields = models.Field.objects.filter(journal=request.journal)
    submission_summary = setting_handler.get_setting('general', 'submission_summary', request.journal).processed_value
    form = forms.ArticleInfo(instance=article,
                             additional_fields=additional_fields,
                             submission_summary=submission_summary,
                             journal=request.journal)

    if request.POST:
        form = forms.ArticleInfo(request.POST, instance=article,
                                 additional_fields=additional_fields,
                                 submission_summary=submission_summary,
                                 journal=request.journal)
        if form.is_valid():
            form.save(request=request)
            article.current_step = 2
            article.save()

            return redirect(reverse('submit_authors', kwargs={'article_id': article_id}))

    template = 'admin/submission//submit_info.html'
    context = {
        'article': article,
        'form': form,
        'additional_fields': additional_fields,
    }

    return render(request, template, context)
Exemple #2
0
def submit_info(request, article_id):
    article = get_object_or_404(models.Article, pk=article_id)
    additional_fields = models.Field.objects.filter(journal=request.journal)
    form = forms.ArticleInfo(instance=article,
                             additional_fields=additional_fields)

    if request.POST:
        form = forms.ArticleInfo(request.POST,
                                 instance=article,
                                 additional_fields=additional_fields)

        if form.is_valid():
            form.save(request=request)
            article.current_step = 2
            article.save()

            return redirect(
                reverse('submit_authors', kwargs={'article_id': article_id}))

    template = 'submission/submit_info.html'
    context = {
        'article': article,
        'form': form,
        'additional_fields': additional_fields,
    }

    return render(request, template, context)
Exemple #3
0
def edit_metadata(request, article_id):
    """
    Allows the Editors and Production Managers to edit an Article's metadata/
    :param request: request object
    :param article_id: PK of an Article
    :return: contextualised django template
    """
    article = get_object_or_404(models.Article, pk=article_id)
    info_form = forms.ArticleInfo(instance=article)
    frozen_author, modal = None, None
    return_param = request.GET.get('return')
    reverse_url = '{0}?return={1}'.format(reverse('edit_metadata', kwargs={'article_id': article.pk}), return_param)

    if request.GET.get('author'):
        frozen_author, modal = logic.get_author(request, article)
        author_form = forms.EditFrozenAuthor(instance=frozen_author)
    else:
        author_form = forms.EditFrozenAuthor()

    if request.POST:

        if 'metadata' in request.POST:
            info_form = forms.ArticleInfo(request.POST, instance=article)

            if info_form.is_valid():
                info_form.save()
                messages.add_message(request, messages.SUCCESS, 'Metadata updated.')
                return redirect(reverse_url)

        if 'author' in request.POST:
            author_form = forms.EditFrozenAuthor(request.POST, instance=frozen_author)

            if author_form.is_valid():
                saved_author = author_form.save()
                saved_author.article = article
                saved_author.save()
                messages.add_message(request, messages.SUCCESS, 'Author {0} updated.'.format(saved_author.full_name()))
                return redirect(reverse_url)

        if 'delete' in request.POST:
            frozen_author_id = request.POST.get('delete')
            frozen_author = get_object_or_404(models.FrozenAuthor,
                                              pk=frozen_author_id,
                                              article=article,
                                              article__journal=request.journal)
            frozen_author.delete()
            messages.add_message(request, messages.SUCCESS, 'Frozen Author deleted.')
            return redirect(reverse_url)

    template = 'submission/edit/metadata.html'
    context = {
        'article': article,
        'info_form': info_form,
        'author_form': author_form,
        'modal': modal,
        'frozen_author': frozen_author,
        'return': return_param
    }

    return render(request, template, context)
Exemple #4
0
def submit_info(request, article_id):
    article = get_object_or_404(models.Article, pk=article_id)

    form = forms.ArticleInfo(instance=article)

    if request.POST:
        form = forms.ArticleInfo(request.POST, instance=article)

        if form.is_valid():
            form.save()
            article.current_step = 2
            article.save()

            return redirect(reverse('submit_authors', kwargs={'article_id': article_id}))

    template = 'submission/submit_info.html'
    context = {
        'article': article,
        'form': form,
    }

    return render(request, template, context)
Exemple #5
0
 def test_edit_section(self):
     """ Ensures editors can select sections that are not submissible"""
     article = models.Article.objects.create(
         journal=self.journal_one,
         title="Test article: a test of sections",
     )
     with translation.override("en"):
         section = models.Section.objects.create(
             journal=self.journal_one,
             name="section",
             public_submissions=False,
         )
         form = forms.ArticleInfo(instance=article)
         self.assertTrue(section in form.fields["section"].queryset)
Exemple #6
0
def submit_funding(request, article_id):
    """
    Presents a form for the user to complete with article information
    :param request: HttpRequest object
    :param article_id: Article PK
    :return: HttpResponse or HttpRedirect
    """
    article = get_object_or_404(models.Article, pk=article_id)
    additional_fields = models.Field.objects.filter(journal=request.journal)
    submission_summary = setting_handler.get_setting(
        'general', 'submission_summary', request.journal).processed_value
    form = forms.ArticleInfo(instance=article,
                             additional_fields=additional_fields,
                             submission_summary=submission_summary,
                             journal=request.journal)

    if request.POST:

        if 'next_step' in request.POST:
            article.current_step = 5
            article.save()
            return redirect(
                reverse('submit_review', kwargs={'article_id': article_id}))

        funder = models.Funder(name=request.POST.get('funder_name',
                                                     default=''),
                               fundref_id=request.POST.get('funder_doi',
                                                           default=''),
                               funding_id=request.POST.get('grant_number',
                                                           default=''))

        funder.save()
        article.funders.add(funder)
        article.save()

    template = 'admin/submission//submit_funding.html'
    context = {
        'article': article,
        'form': form,
        'additional_fields': additional_fields,
    }

    return render(request, template, context)
Exemple #7
0
def article(request, article_id):
    article = get_object_or_404(models.Article,
                                pk=article_id,
                                journal=request.journal)
    article_form = forms.ArticleInfo(instance=article)
    author_form = forms.AuthorForm()
    pub_form = bc_forms.PublicationInfo(instance=article)
    remote_form = bc_forms.RemoteArticle(instance=article)
    modal = None

    if request.POST:
        if 'save_section_1' in request.POST:
            article_form = forms.ArticleInfo(request.POST, instance=article)

            if article_form.is_valid():
                article_form.save()
                return redirect(
                    reverse('bc_article', kwargs={'article_id': article.pk}))

        if 'save_section_2' in request.POST:
            correspondence_author = request.POST.get('main-author', None)

            if correspondence_author:
                author = core_models.Account.objects.get(
                    pk=correspondence_author)
                article.correspondence_author = author
                article.save()
                return redirect(
                    reverse('bc_article', kwargs={'article_id': article.pk}))

        if 'save_section_4' in request.POST:
            pub_form = bc_forms.PublicationInfo(request.POST, instance=article)

            if pub_form.is_valid():
                pub_form.save()
                if article.primary_issue:
                    article.primary_issue.articles.add(article)

                if article.date_published:
                    article.stage = models.STAGE_READY_FOR_PUBLICATION
                    article.save()
                return redirect(
                    reverse('bc_article', kwargs={'article_id': article.pk}))

        if 'save_section_5' in request.POST:
            remote_form = bc_forms.RemoteArticle(request.POST,
                                                 instance=article)

            if remote_form.is_valid():
                remote_form.save()
                return redirect(
                    reverse('bc_article', kwargs={'article_id': article.pk}))

        if 'xml' in request.POST:
            for uploaded_file in request.FILES.getlist('xml-file'):
                prod_logic.save_galley(article, request, uploaded_file, True,
                                       "XML", False)

        if 'pdf' in request.POST:
            for uploaded_file in request.FILES.getlist('pdf-file'):
                prod_logic.save_galley(article, request, uploaded_file, True,
                                       "PDF", False)

        if 'other' in request.POST:
            for uploaded_file in request.FILES.getlist('other-file'):
                prod_logic.save_galley(article, request, uploaded_file, True,
                                       "Other", True)

        if 'add_author' in request.POST:
            author_form = forms.AuthorForm(request.POST)
            modal = 'author'

            author_exists = logic.check_author_exists(
                request.POST.get('email'))
            if author_exists:
                article.authors.add(author_exists)
                messages.add_message(
                    request, messages.SUCCESS,
                    '%s added to the article' % author_exists.full_name())
                return redirect(
                    reverse('bc_article', kwargs={'article_id': article_id}))
            else:
                if author_form.is_valid():
                    new_author = author_form.save(commit=False)
                    new_author.username = new_author.email
                    new_author.set_password(shared.generate_password())
                    new_author.save()
                    new_author.add_account_role(role_slug='author',
                                                journal=request.journal)
                    article.authors.add(new_author)
                    messages.add_message(
                        request, messages.SUCCESS,
                        '%s added to the article' % new_author.full_name())

                    return redirect(
                        reverse('bc_article',
                                kwargs={'article_id': article_id}))

        if 'publish' in request.POST:
            if not article.stage == models.STAGE_PUBLISHED:
                id_logic.generate_crossref_doi_with_pattern(article)
                article.stage = models.STAGE_PUBLISHED
                article.snapshot_authors(article)
                article.save()

            if plugin_settings.IS_WORKFLOW_PLUGIN:
                workflow_kwargs = {
                    'handshake_url': 'bc_article',
                    'request': request,
                    'article': article,
                    'switch_stage': True
                }
                return event_logic.Events.raise_event(
                    event_logic.Events.ON_WORKFLOW_ELEMENT_COMPLETE,
                    task_object=article,
                    **workflow_kwargs)
            else:
                return redirect(reverse('bc_index'))

    template = 'back_content/article.html'
    context = {
        'article': article,
        'article_form': article_form,
        'form': author_form,
        'pub_form': pub_form,
        'galleys': prod_logic.get_all_galleys(article),
        'remote_form': remote_form,
        'modal': modal
    }

    return render(request, template, context)
Exemple #8
0
def edit_metadata(request, article_id):
    """
    Allows the Editors and Production Managers to edit an Article's metadata/
    :param request: request object
    :param article_id: PK of an Article
    :return: contextualised django template
    """
    article = get_object_or_404(models.Article, pk=article_id)
    submission_summary = setting_handler.get_setting(
        'general',
        'submission_summary',
        request.journal,
    ).processed_value
    info_form = forms.ArticleInfo(
        instance=article,
        submission_summary=submission_summary,
        pop_disabled_fields=False,
    )
    frozen_author, modal = None, None
    return_param = request.GET.get('return')
    reverse_url = '{0}?return={1}'.format(
        reverse(
            'edit_metadata',
            kwargs={'article_id': article.pk}
        ),
        return_param,
    )

    if request.GET.get('author'):
        frozen_author, modal = logic.get_author(request, article)
        author_form = forms.EditFrozenAuthor(instance=frozen_author)
    else:
        author_form = forms.EditFrozenAuthor()

    if request.POST:
        if 'add_funder' in request.POST:
            funder = models.Funder(
                name=request.POST.get('funder_name', default=''),
                fundref_id=request.POST.get('funder_doi', default=''),
                funding_id=request.POST.get('grant_number', default='')
            )

            funder.save()
            article.funders.add(funder)
            article.save()

        if 'metadata' in request.POST:
            info_form = forms.ArticleInfo(
                request.POST,
                instance=article,
                submission_summary=submission_summary,
                pop_disabled_fields=False,
            )

            if info_form.is_valid():
                info_form.save(request=request)
                messages.add_message(
                    request,
                    messages.SUCCESS,
                    'Metadata updated.',
                )
                return redirect(reverse_url)

        if 'author' in request.POST:
            author_form = forms.EditFrozenAuthor(
                request.POST,
                instance=frozen_author,
            )

            if author_form.is_valid():
                saved_author = author_form.save()
                saved_author.article = article
                saved_author.save()
                messages.add_message(
                    request,
                    messages.SUCCESS,
                    'Author {0} updated.'.format(saved_author.full_name()),
                )
                return redirect(reverse_url)

        if 'delete' in request.POST:
            frozen_author_id = request.POST.get('delete')
            frozen_author = get_object_or_404(models.FrozenAuthor,
                                              pk=frozen_author_id,
                                              article=article,
                                              article__journal=request.journal)
            frozen_author.delete()
            messages.add_message(
                request,
                messages.SUCCESS,
                'Frozen Author deleted.',
            )
            return redirect(reverse_url)

    template = 'submission/edit/metadata.html'
    context = {
        'article': article,
        'info_form': info_form,
        'author_form': author_form,
        'modal': modal,
        'frozen_author': frozen_author,
        'return': return_param
    }

    return render(request, template, context)