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)
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)
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)
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)
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)
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)
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)
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)