Beispiel #1
0
class ArticleForm(Form):
    title = StringField("Article Title", [validators.DataRequired()])
    doi = StringField("DOI", [OptionalIf("fulltext"), validators.Regexp(regex=DOI_REGEX, message=DOI_ERROR)], description="(You must provide a DOI and/or a Full-Text URL)")
    authors = FieldList(FormField(AuthorForm), min_entries=1) # We have to do the validation for this at a higher level
    abstract = TextAreaField("Abstract", [validators.Optional()])
    keywords = StringField("Keywords", [validators.Optional()], description="Use a , to separate keywords") # enhanced with select2
    fulltext = StringField("Full-Text URL", [OptionalIf("doi"), validators.URL()])
    publication_year = DOAJSelectField("Year", [validators.Optional()], choices=YEAR_CHOICES, default=str(datetime.now().year))
    publication_month = DOAJSelectField("Month", [validators.Optional()], choices=MONTH_CHOICES, default=str(datetime.now().month) )
    pissn = DOAJSelectField("Journal ISSN (print version)", [ThisOrThat("eissn")], choices=[]) # choices set at construction
    eissn = DOAJSelectField("Journal ISSN (online version)", [ThisOrThat("pissn")], choices=[]) # choices set at construction

    volume = StringField("Volume Number", [validators.Optional()])
    number = StringField("Issue Number", [validators.Optional()])
    start = StringField("Start Page", [validators.Optional()])
    end = StringField("End Page", [validators.Optional()])

    def __init__(self, *args, **kwargs):
        super(ArticleForm, self).__init__(*args, **kwargs)
        try:
            self.pissn.choices = Choices.choices_for_article_issns(current_user)
            self.eissn.choices = Choices.choices_for_article_issns(current_user)
        except:
            # not logged in, and current_user is broken
            # probably you are loading the class from the command line
            pass
Beispiel #2
0
class ApplicationSubject(Form):
    """ Subject classification entry - with workflow validation"""

    subject = DOAJSelectMultipleField('Subjects', [
        OptionalIf('application_status',
                   optvals=Choices.application_status_subject_optional())
    ],
                                      choices=Choices.subjects())
Beispiel #3
0
class ApplicationOwner(Form):
    """ An Owner field which is optional under certain conditions.  For use in some admin forms """

    owner = StringField('Owner',
        [ReservedUsernames(), OptionalIf('application_status', optvals=Choices.application_status_optional())],
        description='DOAJ account to which the application belongs.'
                    '<br><br>'
                    'This field is optional unless the application status is set to Accepted.'
                    '<br><br>'
                    'Entering a non-existent account and setting the application status to Accepted will automatically create the account using the Contact information in Questions 9 & 10, and send an email containing the Contact\'s username + password.'
    )
Beispiel #4
0
class MakeContinuation(Form):

    title = StringField('Journal Title', [validators.DataRequired()])

    pissn = StringField(
        'Journal ISSN (print version)',
        [
            OptionalIf('eissn'),
            validators.Regexp(regex=ISSN_REGEX, message=ISSN_ERROR)
        ],
        description=
        'Only provide the print ISSN if your journal has one, otherwise leave this field blank. Write the ISSN with the hyphen "-" e.g. 1234-4321.',
    )
    eissn = StringField(
        'Journal ISSN (online version)',
        [
            OptionalIf('pissn'),
            validators.Regexp(regex=ISSN_REGEX, message=ISSN_ERROR)
        ],
        description=
        'Cannot be the same as the P-ISSN. Write the EISSN with the hyphen "-" e.g. 1234-4321.',
    )

    type = HiddenField()
Beispiel #5
0
class JournalInformation(Form):
    """All the bibliographic metadata associated with a journal in the DOAJ"""

    title = StringField('Journal Title', [validators.DataRequired()])
    url = URLField('URL', [validators.DataRequired(), URLOptionalScheme()])
    alternative_title = StringField('Alternative Title',
                                    [validators.Optional()])
    pissn = StringField(
        'Journal ISSN (print version)',
        [
            OptionalIf('eissn'),
            validators.Regexp(regex=ISSN_REGEX, message=ISSN_ERROR)
        ],
        description=
        'Only provide the print ISSN if your journal has one, otherwise leave this field blank. Write the ISSN with the hyphen "-" e.g. 1234-4321.',
    )
    eissn = StringField(
        'Journal ISSN (online version)',
        [
            OptionalIf('pissn'),
            validators.Regexp(regex=ISSN_REGEX, message=ISSN_ERROR)
        ],
        description=
        'Cannot be the same as the P-ISSN. Write the EISSN with the hyphen "-" e.g. 1234-4321.',
    )
    publisher = StringField('Publisher', [validators.DataRequired()])
    society_institution = StringField(
        'Society or Institution',
        [validators.Optional()],
        description=
        'The name of the Society or Institution that the journal belongs to',
    )
    platform = StringField(
        'Platform, Host or Aggregator', [validators.Optional()],
        description=
        'The name of the platform, host or aggregator of the journal content, e.g. OJS, HighWire Press, EBSCO etc.'
    )
    contact_name = StringField(
        'Name of contact for this journal',
        [validators.DataRequired()],
        description='Somebody who DOAJ can contact about this journal',
    )
    contact_email = StringField('Contact\'s email address', [
        validators.DataRequired(),
        validators.Email(message='Invalid email address.')
    ])
    confirm_contact_email = StringField('Confirm contact\'s email address', [
        validators.DataRequired(),
        validators.Email(message='Invalid email address.'),
        validators.EqualTo('contact_email', EMAIL_CONFIRM_ERROR)
    ])
    country = SelectField(
        'In which country is the publisher of the journal based?',
        [validators.DataRequired()],
        description=
        'Select the country where the publishing company is legally registered',
        choices=Choices.country(),
    )
    processing_charges = RadioField(
        'Does the journal have article processing charges (APCs)?',
        [validators.DataRequired()],
        # description = 'If "No" proceed to question below',
        choices=Choices.processing_charges())
    processing_charges_url = URLField(
        'Enter the URL where this information can be found',
        [validators.DataRequired(),
         URLOptionalScheme()],
        # description='This field is optional if you have selected "No" above'
    )
    processing_charges_amount = IntegerField(
        'Amount',
        [
            OptionalIf('processing_charges',
                       optvals=Choices.processing_charges_amount_optional())
        ],
    )
    processing_charges_currency = SelectField(
        'Currency',
        [
            OptionalIf('processing_charges',
                       optvals=Choices.processing_charges_currency_optional())
        ],
        choices=Choices.currency(),
    )

    submission_charges = RadioField(
        'Does the journal have article submission charges?',
        [validators.DataRequired()],
        # description = 'If "No" proceed to question below',
        choices=Choices.submission_charges())
    submission_charges_url = URLField(
        'Enter the URL where this information can be found',
        [validators.DataRequired(),
         URLOptionalScheme()],
        # description='This field is optional if you have selected "No" above'
    )
    submission_charges_amount = IntegerField(
        'Amount',
        [
            OptionalIf('submission_charges',
                       optvals=Choices.submission_charges_amount_optional())
        ],
    )
    submission_charges_currency = SelectField(
        'Currency',
        [
            OptionalIf('submission_charges',
                       optvals=Choices.submission_charges_amount_optional())
        ],
        choices=Choices.currency(),
    )
    waiver_policy = RadioField(
        'Does the journal have a waiver policy (for developing country authors etc)?',
        [validators.DataRequired()],
        choices=Choices.waiver_policy())
    waiver_policy_url = URLField(
        'Enter the URL where this information can be found', [
            OptionalIf('waiver_policy',
                       optvals=Choices.waiver_policy_url_optional()),
            URLOptionalScheme()
        ])
    digital_archiving_policy = SelectMultipleField(
        'What digital archiving policy does the journal use?', [
            validators.DataRequired(),
            ExclusiveCheckbox(Choices.digital_archiving_policy_val("none")),
            ExtraFieldRequiredIf(
                'digital_archiving_policy_library',
                reqval=Choices.digital_archiving_policy_val("library")),
            ExtraFieldRequiredIf(
                'digital_archiving_policy_other',
                reqval=Choices.digital_archiving_policy_val("other")),
        ],
        description=
        "Select all that apply. Institutional archives and publishers' own online archives are not valid",
        choices=Choices.digital_archiving_policy(),
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))
    digital_archiving_policy_other = StringField('', )
    digital_archiving_policy_library = StringField('', )
    digital_archiving_policy_url = URLField(
        'Enter the URL where this information can be found',
        [
            OptionalIf(
                'digital_archiving_policy',
                optvals=Choices.digital_archiving_policy_url_optional()),
            URLOptionalScheme()
        ],
        description=
        'This field is optional if you have only selected "No policy in place" above',
    )
    crawl_permission = RadioField(
        'Does the journal allow anyone to crawl the full-text of the journal?',
        [validators.DataRequired()],
        choices=Choices.crawl_permission())
    article_identifiers = SelectMultipleField(
        'Which article identifiers does the journal use?',
        [
            validators.DataRequired(),
            ExtraFieldRequiredIf(
                'article_identifiers_other',
                reqval=Choices.article_identifiers_val("other")),
            ExclusiveCheckbox()
        ],
        choices=Choices.article_identifiers(),
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False),
    )
    article_identifiers_other = StringField('', )
    download_statistics = RadioField(
        'Does the journal provide article download statistics?',
        [validators.DataRequired()],
        description='If "No" proceed to question 32',
        choices=Choices.download_statistics())
    download_statistics_url = StringField(
        'Enter the URL where this information can be found',
        [validators.Optional()],
    )
    first_fulltext_oa_year = IntegerField(
        'What was the first calendar year in which a complete volume of the journal provided online Open Access content to the Full Text of all articles? (Full Text may be provided as PDFs. Does not apply for new journals.)',
        [
            validators.DataRequired(),
            validators.NumberRange(min=1600, max=(datetime.now().year))
        ],
        description='Use 4 digits for the year, i.e. YYYY format')
    fulltext_format = SelectMultipleField(
        'Please indicate which formats of full text are available', [
            validators.DataRequired(),
            ExtraFieldRequiredIf('fulltext_format_other',
                                 reqval=Choices.fulltext_format_val("other"))
        ],
        description='Tick all that apply',
        choices=Choices.fulltext_format(),
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))
    fulltext_format_other = StringField('', )
    keywords = TagListField(
        'Add keyword(s) that best describe the journal (comma delimited)', [
            validators.DataRequired(),
            MaxLen(6, message='You can only enter up to {max_len} keywords.')
        ],
        description='Maximum 6. Keywords must be in English.')
    languages = SelectMultipleField(
        'Select the language(s) that the Full Text of the articles is published in',
        [validators.DataRequired()],
        choices=Choices.language(),
        description="You can select multiple languages")
    editorial_board_url = URLField(
        'What is the URL for the Editorial Board page?',
        [validators.DataRequired(),
         URLOptionalScheme()],
        description=
        'The journal must have either an editor or an editorial board with at least 5 clearly identifiable members and affiliation information. We may ask for affiliation information and email addresses as part of our checks.'
    )
    review_process = SelectField(
        'Please select the review process for papers',
        [validators.DataRequired()],
        choices=Choices.review_process(),
        default=Choices.review_process_default(),
    )
    review_process_url = URLField(
        'Enter the URL where this information can be found', [
            OptionalIf('review_process',
                       optvals=Choices.review_process_url_optional()),
            URLOptionalScheme()
        ],
        description='This field is optional if you have selected "None" above.'
    )
    aims_scope_url = URLField("What is the URL for the journal's Aims & Scope",
                              [validators.DataRequired(),
                               URLOptionalScheme()])
    instructions_authors_url = URLField(
        "What is the URL for the journal's instructions for authors?",
        [validators.DataRequired(),
         URLOptionalScheme()])
    plagiarism_screening = RadioField(
        'Does the journal have a policy of screening for plagiarism?',
        [validators.DataRequired()],
        description='If "No" proceed to question 43',
        choices=Choices.plagiarism_screening())
    plagiarism_screening_url = URLField(
        "Enter the URL where this information can be found", [
            OptionalIf('plagiarism_screening',
                       optvals=Choices.plagiarism_screening_url_optional()),
            URLOptionalScheme()
        ])
    publication_time = IntegerField(
        'What is the average number of weeks between submission and publication?',
        [validators.DataRequired(),
         validators.NumberRange(min=0, max=53)])
    oa_statement_url = URLField(
        "What is the URL for the journal's Open Access statement?",
        [validators.DataRequired(),
         URLOptionalScheme()])
    license_embedded = RadioField(
        'Does the journal embed or display simple machine-readable CC licensing information in its articles?',
        [validators.DataRequired()],
        choices=Choices.licence_embedded(),
        description=
        'For more information go to <a target="_blank" href="http://wiki.creativecommons.org/CC_REL">http://wiki.creativecommons.org/CC_REL</a><br><br>If "No" proceed to question 47.',
    )
    license_embedded_url = URLField(
        "Please provide a URL to an example page with embedded licensing information",
        [
            OptionalIf('license_embedded',
                       optvals=Choices.licence_embedded_url_optional()),
            URLOptionalScheme()
        ])
    license = RadioField(
        'Does the journal allow reuse and remixing of its content, in accordance with a CC license?',
        [
            validators.DataRequired(),
            ExtraFieldRequiredIf('license_other',
                                 reqval=Choices.licence_val("other"))
        ],
        choices=Choices._licence,
        description=
        'For more information go to <a href="http://creativecommons.org/licenses/" target="_blank">http://creativecommons.org/licenses/</a>'
    )
    license_other = StringField('', )
    license_checkbox = SelectMultipleField(
        'Which of the following does the content require? (Tick all that apply.)',
        choices=Choices.licence_checkbox(),
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False),
    )
    license_url = URLField(
        "Enter the URL on your site where your license terms are stated",
        [validators.Optional(), URLOptionalScheme()])
    open_access = RadioField(
        "Does the journal allow readers to 'read, download, copy, distribute, print, search, or link to the full texts' of its articles?",
        [validators.DataRequired()],
        choices=Choices.open_access(),
        description=
        'From the <a href="http://www.budapestopenaccessinitiative.org/read" target="_blank">Budapest Open Access Initiative\'s definition of Open Access</a>',
    )
    deposit_policy = SelectMultipleField(
        'With which deposit policy directory does the journal have a registered deposit policy?',
        [
            validators.DataRequired(),
            ExtraFieldRequiredIf(
                'deposit_policy_other',
                reqval=Choices.deposit_policy_other_val("other")),
            ExclusiveCheckbox()
        ],
        description='Select all that apply.',
        choices=Choices.deposit_policy(),
        option_widget=widgets.CheckboxInput(),
        widget=widgets.ListWidget(prefix_label=False))
    deposit_policy_other = StringField('', )
    copyright = RadioField(
        'Does the journal allow the author(s) to hold the copyright without restrictions?',
        [
            validators.DataRequired(),
            ExtraFieldRequiredIf('copyright_other',
                                 reqval=Choices.copyright_other_val("other"))
        ],
        choices=Choices.copyright())
    copyright_other = StringField('', )
    copyright_url = URLField(
        'Enter the URL where this information can be found', [
            OptionalIf('copyright', optvals=Choices.copyright_url_optional()),
            URLOptionalScheme()
        ])
    publishing_rights = RadioField(
        'Will the journal allow the author(s) to retain publishing rights without restrictions?',
        [
            validators.Required(),
            ExtraFieldRequiredIf(
                'publishing_rights_other',
                reqval=Choices.publishing_rights_other_val("other"))
        ],
        choices=Choices.publishing_rights())
    publishing_rights_other = StringField('', )
    publishing_rights_url = URLField(
        'Enter the URL where this information can be found', [
            OptionalIf('publishing_rights',
                       optvals=Choices.publishing_rights_url_optional()),
            URLOptionalScheme()
        ])