diff --git a/scipost_django/submissions/admin.py b/scipost_django/submissions/admin.py index 8a8581316684cea0f4882bea0b07ecad8d04c2aa..60c61946540aec43850a0f04fcdbad87a0660dfc 100644 --- a/scipost_django/submissions/admin.py +++ b/scipost_django/submissions/admin.py @@ -210,6 +210,7 @@ class SubmissionAdmin(GuardedModelAdmin): "specialties", "approaches", "proceedings", + "code_metadata" ), }, ), diff --git a/scipost_django/submissions/forms/__init__.py b/scipost_django/submissions/forms/__init__.py index 17d4e8af4c56f7b3431e470c4721894e810a9f46..826b343dcd735092c5b5f902d6cd9ecc34f34179 100644 --- a/scipost_django/submissions/forms/__init__.py +++ b/scipost_django/submissions/forms/__init__.py @@ -1302,6 +1302,24 @@ class SubmissionForm(forms.ModelForm): "".format(url="https://scipost.org/journals/journals_terms_and_conditions"), # FIX reversing on journals:journals_terms_and_conditions errors with circular import ) + code_name = forms.CharField( + label="Software name", + help_text="Please provide the name of the software referenced in this submission.", + required=True, + ) + code_version = forms.CharField( + label="Software version", + help_text="Provide the software version referenced in this submission (e.g. v1.2.3).", + required=True, + ) + code_license = forms.CharField( + label="Software license", + help_text=( + 'Type the name of an acceptable license (one approved by <a href="https://opensource.org/licenses">OSI</a>). ' + + 'Please consult <a href="https://scipost.org/SciPostPhysCodeb/about#licensing">the about page</a> for more information.' + ), + required=True, + ) class Meta: model = Submission @@ -1318,8 +1336,11 @@ class SubmissionForm(forms.ModelForm): "author_list", "abstract", "followup_of", - "code_repository_url", "data_repository_url", + "code_repository_url", + "code_name", + "code_version", + "code_license", "author_comments", "list_of_changes", "remarks_for_editors", @@ -1417,6 +1438,12 @@ class SubmissionForm(forms.ModelForm): + str(kwargs["initial"].get("acad_field").id) ) + # Codebases-only fields + if "Codeb" not in self.submitted_to_journal.doi_label: + del self.fields["code_name"] + del self.fields["code_version"] + del self.fields["code_license"] + # Proceedings & Collection submission fields if "LectNotes" not in self.submitted_to_journal.doi_label: del self.fields["collection"] @@ -1673,6 +1700,15 @@ class SubmissionForm(forms.ModelForm): submission.metadata = self.metadata submission.preprint = preprint + + # Codebases-only fields + if "Codeb" in submission.submitted_to.doi_label: + submission.code_metadata = { + "code_name": self.cleaned_data["code_name"], + "code_version": self.cleaned_data["code_version"], + "code_license": self.cleaned_data["code_license"], + } + submission.save() # Try to match the submitting author's last name to a position from the author list. diff --git a/scipost_django/submissions/migrations/0150_submission_code_metadata.py b/scipost_django/submissions/migrations/0150_submission_code_metadata.py new file mode 100644 index 0000000000000000000000000000000000000000..22dd657597516299ec3a1b620cf5acb4d0d048ff --- /dev/null +++ b/scipost_django/submissions/migrations/0150_submission_code_metadata.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.10 on 2024-03-26 13:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("submissions", "0149_alter_qualification_expertise_level_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="submission", + name="code_metadata", + field=models.JSONField( + blank=True, + default=dict, + help_text="Information about the software referenced in the codebases publication", + ), + ), + ] diff --git a/scipost_django/submissions/models/submission.py b/scipost_django/submissions/models/submission.py index 514b4040727b4b2cad687946f2dddc2818fefdef..8c9dec408f5414a013bd81d18ea09a3ecafa43bb 100644 --- a/scipost_django/submissions/models/submission.py +++ b/scipost_django/submissions/models/submission.py @@ -352,11 +352,16 @@ class Submission(models.Model): abstract = models.TextField() # Links to associated code and data + data_repository_url = models.URLField( + blank=True, help_text="Link to a data repository pertaining to your manuscript" + ) code_repository_url = models.URLField( blank=True, help_text="Link to a code repository pertaining to your manuscript" ) - data_repository_url = models.URLField( - blank=True, help_text="Link to a data repository pertaining to your manuscript" + code_metadata = models.JSONField( + default=dict, + blank=True, + help_text="Information about the software referenced in the codebases publication", ) # Comments can be added to a Submission