invenio-app-rdm 13.0.0b4.dev1__py2.py3-none-any.whl → 14.0.0b1.dev8__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- invenio_app_rdm/__init__.py +1 -1
- invenio_app_rdm/administration/moderation/__init__.py +11 -0
- invenio_app_rdm/administration/moderation/requests.py +175 -0
- invenio_app_rdm/administration/records/records.py +9 -7
- invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests.html +14 -0
- invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html +91 -0
- invenio_app_rdm/administration/user_moderation/user_moderation.py +4 -4
- invenio_app_rdm/administration/users/users.py +0 -5
- invenio_app_rdm/communities_ui/views/communities.py +9 -5
- invenio_app_rdm/config.py +73 -4
- invenio_app_rdm/ext.py +2 -2
- invenio_app_rdm/fixtures/pages.py +5 -2
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +11 -0
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +2 -5
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/citation.html +2 -2
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/details.html +2 -2
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html +8 -7
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/external_resources.html +5 -6
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/licenses.html +9 -13
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +8 -5
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/stats.html +2 -4
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +1 -1
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/doi.html +7 -5
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +21 -4
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html +6 -1
- invenio_app_rdm/records_ui/utils.py +93 -1
- invenio_app_rdm/records_ui/views/decorators.py +24 -14
- invenio_app_rdm/records_ui/views/deposits.py +100 -27
- invenio_app_rdm/records_ui/views/filters.py +11 -4
- invenio_app_rdm/records_ui/views/records.py +23 -13
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/file-modification/index.html +88 -0
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html +5 -5
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +95 -0
- invenio_app_rdm/requests_ui/views/requests.py +54 -87
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js +8 -8
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +12 -17
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +14 -16
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +1 -1
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +1 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchResultItem.js +81 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchbarLayout.js +48 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/index.js +22 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +3 -4
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CopyButton.js +38 -19
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/FileModificationUntil.js +45 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js +354 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js +44 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +81 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +55 -5
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +4 -1
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js +2 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js +7 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +52 -19
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCitationField.js +15 -14
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesListModal.js +4 -4
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitySubmission/RecordCommunitySubmissionModal.js +1 -1
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +17 -3
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +16 -17
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +5 -5
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +42 -40
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js +9 -5
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js +5 -5
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js +2 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +14 -19
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js +9 -0
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -0
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/licenses.less +5 -3
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides +6 -1
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides +10 -1
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.overrides +7 -0
- invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.variables +0 -0
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js +1 -1
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/_generatedTranslations.js +66 -0
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po +804 -137
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/translations.json +277 -249
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/messages.po +689 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/translations.json +102 -82
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/messages.po +699 -80
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/translations.json +112 -92
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/messages.po +821 -138
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/translations.json +290 -262
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/messages.po +691 -66
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/translations.json +91 -71
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/messages.po +818 -138
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/translations.json +260 -240
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/messages.po +698 -78
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/translations.json +108 -88
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/messages.po +1000 -5
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/translations.json +81 -28
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/messages.po +810 -137
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/translations.json +253 -233
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/messages.po +746 -133
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/translations.json +130 -110
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/messages.po +688 -69
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/translations.json +103 -79
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/messages.po +809 -126
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/translations.json +277 -257
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/messages.po +695 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/translations.json +101 -79
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/messages.po +801 -135
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/translations.json +254 -234
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js +16 -65
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/messages.po +712 -86
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/translations.json +116 -96
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/messages.po +683 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/translations.json +96 -78
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/messages.po +689 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/translations.json +109 -85
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/messages.po +889 -0
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/translations.json +277 -0
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/messages.po +702 -71
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/translations.json +113 -85
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/messages.po +689 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/translations.json +102 -82
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/messages.po +704 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/translations.json +119 -91
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/messages.po +694 -69
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/translations.json +93 -73
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/messages.po +717 -85
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/translations.json +155 -133
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/messages.po +806 -124
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/translations.json +288 -260
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/messages.po +713 -82
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/translations.json +119 -91
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/messages.po +807 -141
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/translations.json +260 -240
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/messages.po +799 -128
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/translations.json +259 -239
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/messages.po +756 -131
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/translations.json +124 -96
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/messages.po +736 -123
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/translations.json +130 -108
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/messages.po +683 -70
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/translations.json +100 -78
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +3 -37
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot +243 -94
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html +2 -2
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +4 -4
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.sv.html +4 -4
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/intro_section.html +7 -6
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/macros/records_list.html +2 -1
- invenio_app_rdm/theme/templates/semantic-ui/invenio_communities/default_static_page.html +26 -0
- invenio_app_rdm/theme/webpack.py +3 -2
- invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +972 -376
- invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +912 -283
- invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1069 -405
- invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +908 -273
- invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1017 -406
- invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +915 -286
- invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +963 -371
- invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +938 -362
- invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +906 -277
- invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1032 -375
- invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +985 -369
- invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +928 -298
- invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +909 -280
- invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
- invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +910 -281
- invenio_app_rdm/translations/messages.pot +486 -303
- invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +906 -277
- invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1042 -384
- invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1022 -370
- invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +916 -287
- invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +989 -380
- invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +992 -341
- invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +935 -356
- invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +939 -347
- invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
- invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +907 -278
- invenio_app_rdm/upgrade_scripts/migrate_12_0_to_13_0.py +190 -62
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/METADATA +118 -7
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/RECORD +209 -225
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/entry_points.txt +2 -0
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/top_level.txt +0 -1
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next-scanner.config.js +0 -64
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package-lock.json +0 -1512
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/compileCatalog.js +0 -40
- invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/initCatalog.js +0 -20
- tests/__init__.py +0 -8
- tests/api/__init__.py +0 -8
- tests/api/conftest.py +0 -24
- tests/api/test_protect_files_rest.py +0 -73
- tests/api/test_record_api.py +0 -175
- tests/api/test_stats_api.py +0 -26
- tests/conftest.py +0 -390
- tests/fixtures/__init__.py +0 -8
- tests/fixtures/app_data/oai_sets.yaml +0 -3
- tests/fixtures/app_data/pages/about.html +0 -1
- tests/fixtures/app_data/pages.yaml +0 -4
- tests/fixtures/conftest.py +0 -27
- tests/fixtures/test_cli.py +0 -25
- tests/fixtures/test_fixtures.py +0 -46
- tests/mock_module/__init__.py +0 -7
- tests/mock_module/templates/mock_mail.html +0 -27
- tests/mock_module/views.py +0 -32
- tests/redirector/__init__.py +0 -8
- tests/redirector/conftest.py +0 -54
- tests/redirector/test_redirector.py +0 -28
- tests/test_tasks.py +0 -209
- tests/test_utils.py +0 -67
- tests/test_version.py +0 -16
- tests/test_views.py +0 -43
- tests/ui/__init__.py +0 -8
- tests/ui/conftest.py +0 -115
- tests/ui/test_deposits.py +0 -115
- tests/ui/test_export_formats.py +0 -37
- tests/ui/test_file_download.py +0 -73
- tests/ui/test_filters.py +0 -10
- tests/ui/test_robotstxt.py +0 -35
- tests/ui/test_signposting_ui.py +0 -95
- tests/ui/test_sitemaps.py +0 -85
- tests/ui/test_stats_ui.py +0 -92
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/WHEEL +0 -0
- {invenio_app_rdm-13.0.0b4.dev1.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2019-
|
|
3
|
+
# Copyright (C) 2019-2025 CERN.
|
|
4
4
|
# Copyright (C) 2019-2021 Northwestern University.
|
|
5
5
|
# Copyright (C) 2021 TU Wien.
|
|
6
|
-
# Copyright (C) 2022-
|
|
6
|
+
# Copyright (C) 2022-2025 KTH Royal Institute of Technology
|
|
7
7
|
# Copyright (C) 2023-2024 Graz University of Technology.
|
|
8
8
|
#
|
|
9
9
|
# Invenio App RDM is free software; you can redistribute it and/or modify it
|
|
@@ -15,6 +15,9 @@ from copy import deepcopy
|
|
|
15
15
|
|
|
16
16
|
from flask import current_app, g, redirect
|
|
17
17
|
from flask_login import login_required
|
|
18
|
+
from invenio_communities.communities.resources.serializer import (
|
|
19
|
+
UICommunityJSONSerializer,
|
|
20
|
+
)
|
|
18
21
|
from invenio_communities.errors import CommunityDeletedError
|
|
19
22
|
from invenio_communities.proxies import current_communities
|
|
20
23
|
from invenio_communities.views.communities import render_community_theme_template
|
|
@@ -25,6 +28,8 @@ from invenio_rdm_records.records.api import get_files_quota
|
|
|
25
28
|
from invenio_rdm_records.resources.serializers import UIJSONSerializer
|
|
26
29
|
from invenio_rdm_records.services.schemas import RDMRecordSchema
|
|
27
30
|
from invenio_rdm_records.services.schemas.utils import dump_empty
|
|
31
|
+
from invenio_rdm_records.views import file_transfer_type
|
|
32
|
+
from invenio_records_resources.proxies import current_transfer_registry
|
|
28
33
|
from invenio_records_resources.services.errors import PermissionDeniedError
|
|
29
34
|
from invenio_search.engine import dsl
|
|
30
35
|
from invenio_vocabularies.proxies import current_service as vocabulary_service
|
|
@@ -32,7 +37,11 @@ from invenio_vocabularies.records.models import VocabularyScheme
|
|
|
32
37
|
from marshmallow_utils.fields.babel import gettext_from_dict
|
|
33
38
|
from sqlalchemy.orm import load_only
|
|
34
39
|
|
|
35
|
-
from ..utils import
|
|
40
|
+
from ..utils import (
|
|
41
|
+
evaluate_file_modification,
|
|
42
|
+
evaluate_record_deletion,
|
|
43
|
+
set_default_value,
|
|
44
|
+
)
|
|
36
45
|
from .decorators import (
|
|
37
46
|
no_cache_response,
|
|
38
47
|
pass_draft,
|
|
@@ -82,10 +91,12 @@ def get_form_pids_config(record=None):
|
|
|
82
91
|
optional_doi_transitions["message"] = optional_doi_transitions.get(
|
|
83
92
|
"message"
|
|
84
93
|
).format(sitename=sitename)
|
|
85
|
-
if
|
|
86
|
-
|
|
94
|
+
if (
|
|
95
|
+
"external" not in optional_doi_transitions["allowed_providers"]
|
|
96
|
+
and "not_needed"
|
|
97
|
+
not in optional_doi_transitions["allowed_providers"]
|
|
87
98
|
):
|
|
88
|
-
# In case we have locally managed provider as
|
|
99
|
+
# In case we have locally managed provider(s) as allowed ones, we need to
|
|
89
100
|
# select it by default. That is relevant for the case when the
|
|
90
101
|
# user creates a new version of the record and the previous version
|
|
91
102
|
# had a datacite DOI.
|
|
@@ -98,9 +109,9 @@ def get_form_pids_config(record=None):
|
|
|
98
109
|
|
|
99
110
|
pids_provider = {
|
|
100
111
|
"scheme": scheme,
|
|
101
|
-
"field_label": "Digital Object Identifier",
|
|
102
|
-
"pid_label": "DOI",
|
|
103
|
-
"pid_placeholder": "Copy/paste your existing DOI here...",
|
|
112
|
+
"field_label": _("Digital Object Identifier"),
|
|
113
|
+
"pid_label": _("DOI"),
|
|
114
|
+
"pid_placeholder": _("Copy/paste your existing DOI here..."),
|
|
104
115
|
"can_be_managed": can_be_managed,
|
|
105
116
|
"can_be_unmanaged": can_be_unmanaged,
|
|
106
117
|
"btn_label_discard_pid": _(
|
|
@@ -200,10 +211,13 @@ class VocabulariesOptions:
|
|
|
200
211
|
for hit in subset_resource_types.to_dict()["hits"]["hits"]
|
|
201
212
|
]
|
|
202
213
|
|
|
203
|
-
def _dump_vocabulary_w_basic_fields(self, vocabulary_type):
|
|
214
|
+
def _dump_vocabulary_w_basic_fields(self, vocabulary_type, extra_filter=None):
|
|
204
215
|
"""Dump vocabulary with id and title field."""
|
|
205
216
|
results = vocabulary_service.read_all(
|
|
206
|
-
g.identity,
|
|
217
|
+
g.identity,
|
|
218
|
+
fields=["id", "title"],
|
|
219
|
+
type=vocabulary_type,
|
|
220
|
+
extra_filter=extra_filter,
|
|
207
221
|
)
|
|
208
222
|
return [
|
|
209
223
|
{
|
|
@@ -278,24 +292,40 @@ class VocabulariesOptions:
|
|
|
278
292
|
"""Dump linkable resource type vocabulary."""
|
|
279
293
|
return self._resource_types(dsl.Q("term", tags="linkable"))
|
|
280
294
|
|
|
281
|
-
def
|
|
282
|
-
"""Dump
|
|
283
|
-
|
|
284
|
-
"Fake" because identifiers scheme is not a vocabulary.
|
|
285
|
-
"""
|
|
295
|
+
def _dump_identifier_schemes(self, config_key):
|
|
296
|
+
"""Dump identifier schemes from a given config key."""
|
|
286
297
|
return [
|
|
287
298
|
{"text": get_scheme_label(scheme), "value": scheme}
|
|
288
|
-
for scheme in current_app.config.get(
|
|
299
|
+
for scheme in current_app.config.get(config_key, {})
|
|
289
300
|
]
|
|
290
301
|
|
|
291
|
-
def
|
|
292
|
-
"""Dump
|
|
293
|
-
self._vocabularies[
|
|
302
|
+
def _dump_identifiers(self, vocab_key, config_key):
|
|
303
|
+
"""Dump identifiers vocabulary for a given vocab/config key pair."""
|
|
304
|
+
self._vocabularies[vocab_key] = {
|
|
294
305
|
"relations": self.relation_types(),
|
|
295
306
|
"resource_type": self.linkable_resource_types(),
|
|
296
|
-
"scheme": self.
|
|
307
|
+
"scheme": self._dump_identifier_schemes(config_key),
|
|
297
308
|
}
|
|
298
309
|
|
|
310
|
+
def identifiers(self):
|
|
311
|
+
"""Dump identifiers vocabulary."""
|
|
312
|
+
self._dump_identifiers("identifiers", "RDM_RECORDS_IDENTIFIERS_SCHEMES")
|
|
313
|
+
|
|
314
|
+
def related_identifiers(self):
|
|
315
|
+
"""Dump related identifiers vocabulary."""
|
|
316
|
+
self._dump_identifiers(
|
|
317
|
+
"related_identifiers", "RDM_RECORDS_RELATED_IDENTIFIERS_SCHEMES"
|
|
318
|
+
)
|
|
319
|
+
|
|
320
|
+
def deletion_request_removal_reasons(self):
|
|
321
|
+
"""Dump deletion request removal reasons vocabulary."""
|
|
322
|
+
self._vocabularies["deletion_request_removal_reasons"] = (
|
|
323
|
+
self._dump_vocabulary_w_basic_fields(
|
|
324
|
+
"removalreasons", extra_filter=dsl.Q("term", tags="deletion-request")
|
|
325
|
+
)
|
|
326
|
+
)
|
|
327
|
+
return self._vocabularies["deletion_request_removal_reasons"]
|
|
328
|
+
|
|
299
329
|
def dump(self):
|
|
300
330
|
"""Dump into dict."""
|
|
301
331
|
# TODO: Nest vocabularies inside "metadata" key so that frontend dumber
|
|
@@ -307,6 +337,8 @@ class VocabulariesOptions:
|
|
|
307
337
|
self.contributor_roles()
|
|
308
338
|
self.subjects()
|
|
309
339
|
self.identifiers()
|
|
340
|
+
self.related_identifiers()
|
|
341
|
+
self.deletion_request_removal_reasons()
|
|
310
342
|
# We removed
|
|
311
343
|
# vocabularies["relation_type"] = _dump_relation_types_vocabulary()
|
|
312
344
|
return self._vocabularies
|
|
@@ -328,6 +360,8 @@ def load_custom_fields():
|
|
|
328
360
|
# for each custom field. This is the label shown at the top of the upload
|
|
329
361
|
# form
|
|
330
362
|
field_error_label = field.get("props", {}).get("label")
|
|
363
|
+
# Add the field ID to the props to allow overriding the React widgets of custom fields
|
|
364
|
+
field["props"]["id"] = field["field"]
|
|
331
365
|
if field_error_label:
|
|
332
366
|
error_labels[f"custom_fields.{field['field']}"] = field_error_label
|
|
333
367
|
if getattr(field_instance, "relation_cls", None):
|
|
@@ -361,6 +395,7 @@ def get_form_config(**kwargs):
|
|
|
361
395
|
cf for cf in custom_fields["ui"] if not cf.get("hide_from_upload_form", False)
|
|
362
396
|
]
|
|
363
397
|
quota = deepcopy(conf.get("APP_RDM_DEPOSIT_FORM_QUOTA", {}))
|
|
398
|
+
max_file_size = conf.get("RDM_FILES_DEFAULT_MAX_FILE_SIZE", None)
|
|
364
399
|
record_quota = kwargs.pop("quota", None)
|
|
365
400
|
if record_quota:
|
|
366
401
|
quota["maxStorage"] = record_quota["quota_size"]
|
|
@@ -375,7 +410,7 @@ def get_form_config(**kwargs):
|
|
|
375
410
|
current_locale=str(current_i18n.locale),
|
|
376
411
|
default_locale=conf.get("BABEL_DEFAULT_LOCALE", "en"),
|
|
377
412
|
pids=get_form_pids_config(record=record),
|
|
378
|
-
quota=quota,
|
|
413
|
+
quota=dict(**quota, maxFileSize=max_file_size),
|
|
379
414
|
decimal_size_display=conf.get("APP_RDM_DISPLAY_DECIMAL_FILE_SIZES", True),
|
|
380
415
|
links=dict(
|
|
381
416
|
user_dashboard_request=conf["RDM_REQUESTS_ROUTES"][
|
|
@@ -387,10 +422,24 @@ def get_form_config(**kwargs):
|
|
|
387
422
|
publish_modal_extra=current_app.config.get(
|
|
388
423
|
"APP_RDM_DEPOSIT_FORM_PUBLISH_MODAL_EXTRA"
|
|
389
424
|
),
|
|
425
|
+
default_transfer_type=current_transfer_registry.default_transfer_type,
|
|
426
|
+
enabled_transfer_types=list(current_transfer_registry.get_transfer_types()),
|
|
427
|
+
transfer_types=file_transfer_type()["transfer_types"],
|
|
390
428
|
**kwargs,
|
|
391
429
|
)
|
|
392
430
|
|
|
393
431
|
|
|
432
|
+
def get_actual_files_quota(draft):
|
|
433
|
+
"""Report the actual effective quota from the draft's bucket, if available."""
|
|
434
|
+
if draft is not None and draft.bucket is not None:
|
|
435
|
+
return {
|
|
436
|
+
"quota_size": draft.bucket.quota_size,
|
|
437
|
+
"max_file_size": draft.bucket.max_file_size,
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
return get_files_quota(draft)
|
|
441
|
+
|
|
442
|
+
|
|
394
443
|
def get_search_url():
|
|
395
444
|
"""Get the search URL."""
|
|
396
445
|
# TODO: this should not be used
|
|
@@ -427,7 +476,7 @@ def new_record():
|
|
|
427
476
|
@login_required
|
|
428
477
|
@no_cache_response
|
|
429
478
|
@pass_draft_community
|
|
430
|
-
def deposit_create(community=None):
|
|
479
|
+
def deposit_create(community=None, community_ui=None):
|
|
431
480
|
"""Create a new deposit."""
|
|
432
481
|
can_create = current_rdm_records.records_service.check_permission(
|
|
433
482
|
g.identity, "create"
|
|
@@ -437,7 +486,7 @@ def deposit_create(community=None):
|
|
|
437
486
|
|
|
438
487
|
community_theme = None
|
|
439
488
|
if community is not None:
|
|
440
|
-
community_theme =
|
|
489
|
+
community_theme = community_ui.get("theme", {})
|
|
441
490
|
|
|
442
491
|
community_use_jinja_header = bool(community_theme)
|
|
443
492
|
dashboard_routes = current_app.config["APP_RDM_USER_DASHBOARD_ROUTES"]
|
|
@@ -453,16 +502,17 @@ def deposit_create(community=None):
|
|
|
453
502
|
forms_config=get_form_config(
|
|
454
503
|
dashboard_routes=dashboard_routes,
|
|
455
504
|
createUrl="/api/records",
|
|
456
|
-
quota=
|
|
505
|
+
quota=get_actual_files_quota(None),
|
|
457
506
|
hide_community_selection=community_use_jinja_header,
|
|
458
507
|
is_doi_required=is_doi_required,
|
|
459
508
|
),
|
|
460
509
|
searchbar_config=dict(searchUrl=get_search_url()),
|
|
461
510
|
record=new_record(),
|
|
462
511
|
community=community,
|
|
512
|
+
community_ui=community_ui,
|
|
463
513
|
community_use_jinja_header=community_use_jinja_header,
|
|
464
514
|
files=dict(default_preview=None, entries=[], links={}),
|
|
465
|
-
preselectedCommunity=
|
|
515
|
+
preselectedCommunity=community_ui,
|
|
466
516
|
files_locked=False,
|
|
467
517
|
permissions=get_record_permissions(
|
|
468
518
|
[
|
|
@@ -498,6 +548,24 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
|
|
|
498
548
|
ui_serializer = UIJSONSerializer()
|
|
499
549
|
record = ui_serializer.dump_obj(draft.to_dict())
|
|
500
550
|
|
|
551
|
+
published_record = None
|
|
552
|
+
if record["is_published"]:
|
|
553
|
+
published_record_result = service.read(
|
|
554
|
+
g.identity, id_=record["id"], expand=True
|
|
555
|
+
)
|
|
556
|
+
published_record = ui_serializer.dump_obj(published_record_result.to_dict())
|
|
557
|
+
|
|
558
|
+
record_deletion = evaluate_record_deletion(
|
|
559
|
+
published_record_result._record, g.identity
|
|
560
|
+
)
|
|
561
|
+
file_modification = evaluate_file_modification(
|
|
562
|
+
published_record_result._record, g.identity
|
|
563
|
+
)
|
|
564
|
+
else:
|
|
565
|
+
record_deletion = {}
|
|
566
|
+
file_modification = {}
|
|
567
|
+
|
|
568
|
+
community_ui = None
|
|
501
569
|
community_theme = None
|
|
502
570
|
community = record.get("expanded", {}).get("parent", {}).get("review", {}).get(
|
|
503
571
|
"receiver"
|
|
@@ -512,6 +580,7 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
|
|
|
512
580
|
id_=community["id"], identity=g.identity
|
|
513
581
|
)
|
|
514
582
|
community_theme = community.to_dict().get("theme", {})
|
|
583
|
+
community_ui = UICommunityJSONSerializer().dump_obj(community.to_dict())
|
|
515
584
|
except CommunityDeletedError:
|
|
516
585
|
pass
|
|
517
586
|
|
|
@@ -529,11 +598,12 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
|
|
|
529
598
|
apiUrl=f"/api/records/{pid_value}/draft",
|
|
530
599
|
dashboard_routes=dashboard_routes,
|
|
531
600
|
# maybe quota should be serialized into the record e.g for admins
|
|
532
|
-
quota=
|
|
601
|
+
quota=get_actual_files_quota(draft._record),
|
|
533
602
|
# hide react community component
|
|
534
603
|
hide_community_selection=community_use_jinja_header,
|
|
535
604
|
is_doi_required=is_doi_required,
|
|
536
605
|
record=draft._record,
|
|
606
|
+
published_record=published_record,
|
|
537
607
|
)
|
|
538
608
|
|
|
539
609
|
if is_doi_required and not record.get("pids", {}).get("doi"):
|
|
@@ -554,6 +624,7 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
|
|
|
554
624
|
forms_config=form_config,
|
|
555
625
|
record=record,
|
|
556
626
|
community=community,
|
|
627
|
+
community_ui=community_ui,
|
|
557
628
|
community_use_jinja_header=community_use_jinja_header,
|
|
558
629
|
files=files_dict,
|
|
559
630
|
searchbar_config=dict(searchUrl=get_search_url()),
|
|
@@ -567,6 +638,8 @@ def deposit_edit(pid_value, draft=None, draft_files=None, files_locked=True):
|
|
|
567
638
|
"manage_record_access",
|
|
568
639
|
]
|
|
569
640
|
),
|
|
641
|
+
record_deletion=record_deletion,
|
|
642
|
+
file_modification=file_modification,
|
|
570
643
|
)
|
|
571
644
|
|
|
572
645
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2019-
|
|
3
|
+
# Copyright (C) 2019-2025 CERN.
|
|
4
4
|
# Copyright (C) 2019-2020 Northwestern University.
|
|
5
5
|
# Copyright (C) 2021 TU Wien.
|
|
6
6
|
# Copyright (C) 2024 Graz University of Technology.
|
|
@@ -123,9 +123,16 @@ def order_entries(files):
|
|
|
123
123
|
|
|
124
124
|
def get_scheme_label(scheme):
|
|
125
125
|
"""Convert backend scheme to frontend label."""
|
|
126
|
-
|
|
126
|
+
configs = [
|
|
127
|
+
current_app.config.get("RDM_RECORDS_IDENTIFIERS_SCHEMES", {}),
|
|
128
|
+
current_app.config.get("RDM_RECORDS_RELATED_IDENTIFIERS_SCHEMES", {}),
|
|
129
|
+
]
|
|
130
|
+
|
|
131
|
+
for cfg in configs:
|
|
132
|
+
if scheme in cfg:
|
|
133
|
+
return cfg[scheme].get("label", scheme)
|
|
127
134
|
|
|
128
|
-
return
|
|
135
|
+
return scheme
|
|
129
136
|
|
|
130
137
|
|
|
131
138
|
def localize_number(value):
|
|
@@ -207,6 +214,6 @@ def transform_record(record, serializer, module=None, throws=True, **kwargs):
|
|
|
207
214
|
if throws:
|
|
208
215
|
raise Exception("No serializer found.")
|
|
209
216
|
except Exception:
|
|
210
|
-
current_app.logger.
|
|
217
|
+
current_app.logger.exception("Record transformation failed.")
|
|
211
218
|
if throws:
|
|
212
219
|
raise
|
|
@@ -37,7 +37,7 @@ from invenio_app_rdm.records_ui.previewer.iiif_simple import (
|
|
|
37
37
|
previewable_extensions as image_extensions,
|
|
38
38
|
)
|
|
39
39
|
|
|
40
|
-
from ..utils import get_external_resources
|
|
40
|
+
from ..utils import evaluate_record_deletion, get_external_resources
|
|
41
41
|
from .decorators import (
|
|
42
42
|
add_signposting_content_resources,
|
|
43
43
|
add_signposting_landing_page,
|
|
@@ -52,7 +52,11 @@ from .decorators import (
|
|
|
52
52
|
pass_record_media_files,
|
|
53
53
|
pass_record_or_draft,
|
|
54
54
|
)
|
|
55
|
-
from .deposits import
|
|
55
|
+
from .deposits import (
|
|
56
|
+
VocabulariesOptions,
|
|
57
|
+
get_user_communities_memberships,
|
|
58
|
+
load_custom_fields,
|
|
59
|
+
)
|
|
56
60
|
|
|
57
61
|
|
|
58
62
|
def get_record_community(record):
|
|
@@ -156,6 +160,16 @@ def record_detail(
|
|
|
156
160
|
record._record.parent["access"]["settings"] = AccessSettings({}).dump()
|
|
157
161
|
|
|
158
162
|
record_ui = UIJSONSerializer().dump_obj(record.to_dict())
|
|
163
|
+
|
|
164
|
+
record_deletion = evaluate_record_deletion(record._record, g.identity)
|
|
165
|
+
|
|
166
|
+
# The deletion options are only needed if the user is allowed to delete the given record.
|
|
167
|
+
record_deletion_options = (
|
|
168
|
+
VocabulariesOptions().deletion_request_removal_reasons()
|
|
169
|
+
if record_deletion["allowed"]
|
|
170
|
+
else []
|
|
171
|
+
)
|
|
172
|
+
|
|
159
173
|
is_draft = record_ui["is_draft"]
|
|
160
174
|
custom_fields = load_custom_fields()
|
|
161
175
|
# keep only landing page configurable custom fields
|
|
@@ -216,19 +230,13 @@ def record_detail(
|
|
|
216
230
|
if record is not None and emitter is not None:
|
|
217
231
|
emitter(current_app, record=record._record, via_api=False)
|
|
218
232
|
|
|
219
|
-
record_owner = (
|
|
220
|
-
record_ui.get("expanded", {})
|
|
221
|
-
.get("parent", {})
|
|
222
|
-
.get("access", {})
|
|
223
|
-
.get("owned_by", {})
|
|
224
|
-
)
|
|
225
233
|
resolved_community, _ = get_record_community(record_ui)
|
|
226
|
-
|
|
234
|
+
resolved_community_ui = (
|
|
227
235
|
UICommunityJSONSerializer().dump_obj(resolved_community.to_dict())
|
|
228
236
|
if resolved_community
|
|
229
237
|
else None
|
|
230
238
|
)
|
|
231
|
-
theme =
|
|
239
|
+
theme = resolved_community_ui.get("theme", {}) if resolved_community else None
|
|
232
240
|
|
|
233
241
|
return render_community_theme_template(
|
|
234
242
|
current_app.config.get("APP_RDM_RECORD_LANDING_PAGE_TEMPLATE"),
|
|
@@ -249,6 +257,8 @@ def record_detail(
|
|
|
249
257
|
"view",
|
|
250
258
|
"media_read_files",
|
|
251
259
|
"moderate",
|
|
260
|
+
"request_deletion",
|
|
261
|
+
"immediately_delete",
|
|
252
262
|
]
|
|
253
263
|
),
|
|
254
264
|
custom_fields_ui=custom_fields["ui"],
|
|
@@ -256,11 +266,11 @@ def record_detail(
|
|
|
256
266
|
include_deleted=include_deleted,
|
|
257
267
|
is_draft=is_draft,
|
|
258
268
|
community=resolved_community,
|
|
269
|
+
community_ui=resolved_community_ui,
|
|
259
270
|
external_resources=get_external_resources(record),
|
|
260
271
|
user_avatar=avatar,
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
), # record created with system_identity have not owners e.g demo
|
|
272
|
+
record_deletion=record_deletion,
|
|
273
|
+
record_deletion_options=record_deletion_options,
|
|
264
274
|
)
|
|
265
275
|
|
|
266
276
|
|
invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/file-modification/index.html
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
This file is part of Invenio.
|
|
4
|
+
Copyright (C) 2016-2025 CERN.
|
|
5
|
+
|
|
6
|
+
Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
#}
|
|
9
|
+
|
|
10
|
+
{% extends "invenio_requests/details/index.html" %}
|
|
11
|
+
|
|
12
|
+
{% set active_dashboard_menu_item = 'requests' %}
|
|
13
|
+
{% set active_community_header_menu_item = 'requests' %}
|
|
14
|
+
|
|
15
|
+
{%- block request_header %}
|
|
16
|
+
{% set back_button_url = url_for("invenio_app_rdm_users.requests") %}
|
|
17
|
+
{% from "invenio_requests/macros/request_header.html" import inclusion_request_header %}
|
|
18
|
+
{{ inclusion_request_header(
|
|
19
|
+
request=invenio_request,
|
|
20
|
+
record=record,
|
|
21
|
+
accepted=request_is_accepted,
|
|
22
|
+
back_button_url=back_button_url,
|
|
23
|
+
back_button_text=_("Back to requests")
|
|
24
|
+
) }}
|
|
25
|
+
{%- endblock request_header %}
|
|
26
|
+
|
|
27
|
+
{% block request_timeline %}
|
|
28
|
+
<div
|
|
29
|
+
class="ui container rdm-tab-container fluid rel-pt-2 ml-0-mobile mr-0-mobile"
|
|
30
|
+
id="request-request-deletion-tab-container"
|
|
31
|
+
>
|
|
32
|
+
<div
|
|
33
|
+
class="ui secondary pointing menu rdm-tab-menu"
|
|
34
|
+
id="request-deletion-request-tab"
|
|
35
|
+
>
|
|
36
|
+
<a
|
|
37
|
+
class="active item"
|
|
38
|
+
data-tab="conversation"
|
|
39
|
+
role="tab"
|
|
40
|
+
aria-selected="true"
|
|
41
|
+
aria-controls="conversation-tab-panel"
|
|
42
|
+
id="conversation-tab"
|
|
43
|
+
>
|
|
44
|
+
{{ _("Conversation") }}
|
|
45
|
+
</a>
|
|
46
|
+
|
|
47
|
+
{% if record_ui %}
|
|
48
|
+
<a
|
|
49
|
+
role="tab"
|
|
50
|
+
class="item"
|
|
51
|
+
data-tab="record"
|
|
52
|
+
aria-selected="false"
|
|
53
|
+
aria-controls="record-tab-panel"
|
|
54
|
+
id="record-tab"
|
|
55
|
+
>
|
|
56
|
+
{{ _("Record") }}
|
|
57
|
+
</a>
|
|
58
|
+
{% endif %}
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div
|
|
62
|
+
class="ui bottom attached tab segment active borderless p-0"
|
|
63
|
+
data-tab="conversation"
|
|
64
|
+
role="tabpanel"
|
|
65
|
+
aria-labelledby="conversation-tab"
|
|
66
|
+
id="conversation-tab-panel"
|
|
67
|
+
>
|
|
68
|
+
{{ super() }}
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{# The record tab content needs to be last since the HTML structure is complex and breaks following tab contents #}
|
|
72
|
+
{% if record_ui %}
|
|
73
|
+
<div
|
|
74
|
+
class="ui bottom attached tab segment borderless"
|
|
75
|
+
data-tab="record"
|
|
76
|
+
role="tabpanel"
|
|
77
|
+
aria-labelledby="record-tab"
|
|
78
|
+
id="record-tab-panel"
|
|
79
|
+
hidden="hidden"
|
|
80
|
+
>
|
|
81
|
+
{% set use_theme_basic_template = false %}
|
|
82
|
+
{% set preview_submission_request = true %}
|
|
83
|
+
{% include config.APP_RDM_RECORD_LANDING_PAGE_TEMPLATE %}
|
|
84
|
+
</div>
|
|
85
|
+
{% endif %}
|
|
86
|
+
|
|
87
|
+
</div>
|
|
88
|
+
{% endblock request_timeline %}
|
invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html
CHANGED
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
{# only display the header for the receiver #}
|
|
31
31
|
{%- set back_button_url = url_for("invenio_app_rdm_users.requests") %}
|
|
32
32
|
{{ inclusion_request_header(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
back_button_url=back_button_url,
|
|
34
|
+
back_button_text=_("Back to requests"),
|
|
35
|
+
request=invenio_request,
|
|
36
|
+
accepted=request_is_accepted
|
|
37
|
+
) }}
|
|
38
38
|
|
|
39
39
|
{%- else %}
|
|
40
40
|
<div class="ui grid rel-mt-2">
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
This file is part of Invenio.
|
|
4
|
+
Copyright (C) 2016-2025 CERN.
|
|
5
|
+
|
|
6
|
+
Invenio is free software; you can redistribute it and/or modify it
|
|
7
|
+
under the terms of the MIT License; see LICENSE file for more details.
|
|
8
|
+
#}
|
|
9
|
+
|
|
10
|
+
{% extends "invenio_requests/details/index.html" %}
|
|
11
|
+
|
|
12
|
+
{% set active_dashboard_menu_item = 'requests' %}
|
|
13
|
+
{% set active_community_header_menu_item = 'requests' %}
|
|
14
|
+
|
|
15
|
+
{%- block request_header %}
|
|
16
|
+
{% set back_button_url = url_for("invenio_app_rdm_users.requests") %}
|
|
17
|
+
{% from "invenio_requests/macros/request_header.html" import inclusion_request_header %}
|
|
18
|
+
{{ inclusion_request_header(
|
|
19
|
+
request=invenio_request,
|
|
20
|
+
record=record,
|
|
21
|
+
accepted=request_is_accepted,
|
|
22
|
+
back_button_url=back_button_url,
|
|
23
|
+
back_button_text=_("Back to requests")
|
|
24
|
+
) }}
|
|
25
|
+
|
|
26
|
+
<div class="twelve wide column mt-10">
|
|
27
|
+
<p><strong>{{ _("Reason:") }}</strong> {{ invenio_request["payload"]["reason_label"] }}</p>
|
|
28
|
+
{%- if invenio_request["payload"]["comment"] %}
|
|
29
|
+
<p><strong>{{ _("Justification:") }}</strong> {{ invenio_request["payload"]["comment"] }}</p>
|
|
30
|
+
{%- endif %}
|
|
31
|
+
</div>
|
|
32
|
+
{%- endblock request_header %}
|
|
33
|
+
|
|
34
|
+
{% block request_timeline %}
|
|
35
|
+
<div
|
|
36
|
+
class="ui container rdm-tab-container fluid rel-pt-2 ml-0-mobile mr-0-mobile"
|
|
37
|
+
id="request-request-deletion-tab-container"
|
|
38
|
+
>
|
|
39
|
+
<div
|
|
40
|
+
class="ui secondary pointing menu rdm-tab-menu"
|
|
41
|
+
id="request-deletion-request-tab"
|
|
42
|
+
>
|
|
43
|
+
<a
|
|
44
|
+
class="active item"
|
|
45
|
+
data-tab="conversation"
|
|
46
|
+
role="tab"
|
|
47
|
+
aria-selected="true"
|
|
48
|
+
aria-controls="conversation-tab-panel"
|
|
49
|
+
id="conversation-tab"
|
|
50
|
+
>
|
|
51
|
+
{{ _("Conversation") }}
|
|
52
|
+
</a>
|
|
53
|
+
|
|
54
|
+
{% if record_ui %}
|
|
55
|
+
<a
|
|
56
|
+
role="tab"
|
|
57
|
+
class="item"
|
|
58
|
+
data-tab="record"
|
|
59
|
+
aria-selected="false"
|
|
60
|
+
aria-controls="record-tab-panel"
|
|
61
|
+
id="record-tab"
|
|
62
|
+
>
|
|
63
|
+
{{ _("Record") }}
|
|
64
|
+
</a>
|
|
65
|
+
{% endif %}
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<div
|
|
69
|
+
class="ui bottom attached tab segment active borderless p-0"
|
|
70
|
+
data-tab="conversation"
|
|
71
|
+
role="tabpanel"
|
|
72
|
+
aria-labelledby="conversation-tab"
|
|
73
|
+
id="conversation-tab-panel"
|
|
74
|
+
>
|
|
75
|
+
{{ super() }}
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
{# The record tab content needs to be last since the HTML structure is complex and breaks following tab contents #}
|
|
79
|
+
{% if record_ui %}
|
|
80
|
+
<div
|
|
81
|
+
class="ui bottom attached tab segment borderless"
|
|
82
|
+
data-tab="record"
|
|
83
|
+
role="tabpanel"
|
|
84
|
+
aria-labelledby="record-tab"
|
|
85
|
+
id="record-tab-panel"
|
|
86
|
+
hidden="hidden"
|
|
87
|
+
>
|
|
88
|
+
{% set use_theme_basic_template = false %}
|
|
89
|
+
{% set preview_submission_request = true %}
|
|
90
|
+
{% include config.APP_RDM_RECORD_LANDING_PAGE_TEMPLATE %}
|
|
91
|
+
</div>
|
|
92
|
+
{% endif %}
|
|
93
|
+
|
|
94
|
+
</div>
|
|
95
|
+
{% endblock request_timeline %}
|