invenio-app-rdm 12.0.0.dev8__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.
Files changed (479) hide show
  1. invenio_app_rdm/__init__.py +3 -2
  2. invenio_app_rdm/{stats/templates/events/record_view/v7 → administration}/__init__.py +1 -3
  3. invenio_app_rdm/{stats/templates/events/record_view → administration/audit_logs}/__init__.py +6 -4
  4. invenio_app_rdm/administration/audit_logs/audit_logs.py +81 -0
  5. invenio_app_rdm/administration/domains/__init__.py +22 -0
  6. invenio_app_rdm/administration/domains/domains.py +159 -0
  7. invenio_app_rdm/administration/moderation/__init__.py +11 -0
  8. invenio_app_rdm/administration/moderation/requests.py +175 -0
  9. invenio_app_rdm/administration/records/__init__.py +15 -0
  10. invenio_app_rdm/administration/records/records.py +163 -0
  11. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/audit_logs.html +14 -0
  12. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/domains_search.html +13 -0
  13. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/records/drafts.html +14 -0
  14. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/records/records.html +14 -0
  15. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests.html +14 -0
  16. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html +91 -0
  17. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation.html +14 -0
  18. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/user_moderation_details.html +14 -0
  19. invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/users_search.html +14 -0
  20. invenio_app_rdm/{stats/templates/aggregations/aggr_record_view/v7 → administration/user_moderation}/__init__.py +4 -3
  21. invenio_app_rdm/administration/user_moderation/user_moderation.py +175 -0
  22. invenio_app_rdm/administration/users/__init__.py +12 -0
  23. invenio_app_rdm/administration/users/users.py +130 -0
  24. invenio_app_rdm/{stats/templates/events/file_download/v7 → administration/views}/__init__.py +4 -3
  25. invenio_app_rdm/administration/views/ui.py +21 -0
  26. invenio_app_rdm/cli.py +37 -14
  27. invenio_app_rdm/communities_ui/searchapp.py +1 -0
  28. invenio_app_rdm/communities_ui/sitemap.py +63 -0
  29. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/collection.html +60 -0
  30. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/macros.html +43 -0
  31. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/details/browse/index.html +59 -0
  32. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/{details → records}/index.html +1 -1
  33. invenio_app_rdm/communities_ui/views/communities.py +183 -8
  34. invenio_app_rdm/communities_ui/views/ui.py +52 -42
  35. invenio_app_rdm/config.py +586 -90
  36. invenio_app_rdm/ext.py +157 -0
  37. invenio_app_rdm/fixtures/__init__.py +2 -2
  38. invenio_app_rdm/fixtures/pages.py +34 -12
  39. invenio_app_rdm/records_ui/searchapp.py +43 -0
  40. invenio_app_rdm/records_ui/sitemap.py +44 -0
  41. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +59 -16
  42. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +236 -141
  43. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/access-form.html +64 -0
  44. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/citation.html +4 -3
  45. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contact.html +2 -1
  46. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/creatibutors.html +22 -20
  47. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/description.html +7 -5
  48. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/details.html +290 -230
  49. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/doi.html +3 -24
  50. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/meta.html +36 -0
  51. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/citations.html +6 -0
  52. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html +30 -22
  53. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/details.html +20 -19
  54. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/export.html +19 -16
  55. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/external_resources.html +55 -0
  56. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/keywords_subjects.html +9 -5
  57. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/licenses.html +62 -49
  58. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/locations.html +23 -0
  59. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +24 -4
  60. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/metrics.html +2 -2
  61. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/technical_metadata.html +21 -0
  62. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/versions.html +15 -5
  63. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/stats.html +93 -79
  64. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/subjects.html +1 -1
  65. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/draft_not_found.html +17 -0
  66. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/export.html +2 -1
  67. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/creatibutors.html +54 -39
  68. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +182 -93
  69. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/doi.html +36 -0
  70. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +152 -79
  71. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/locations.html +62 -0
  72. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/version.html +3 -2
  73. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/restricted_with_doi_tombstone.html +33 -0
  74. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html +55 -12
  75. invenio_app_rdm/records_ui/utils.py +126 -1
  76. invenio_app_rdm/records_ui/views/__init__.py +75 -17
  77. invenio_app_rdm/records_ui/views/decorators.py +309 -38
  78. invenio_app_rdm/records_ui/views/deposits.py +302 -51
  79. invenio_app_rdm/records_ui/views/filters.py +74 -7
  80. invenio_app_rdm/records_ui/views/records.py +256 -90
  81. invenio_app_rdm/redirector/resource.py +1 -0
  82. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-submission/index.html +34 -8
  83. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/file-modification/index.html +88 -0
  84. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html +66 -0
  85. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/macros/request_header.html +5 -3
  86. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +95 -0
  87. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity/index.html +49 -0
  88. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity-invitation/index.html +49 -0
  89. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/user-access-request/index.html +59 -0
  90. invenio_app_rdm/requests_ui/views/requests.py +221 -42
  91. invenio_app_rdm/requests_ui/views/ui.py +17 -4
  92. invenio_app_rdm/tasks.py +6 -2
  93. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js +136 -0
  94. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js +35 -0
  95. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js +119 -0
  96. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js +31 -0
  97. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js +87 -0
  98. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/index.js +9 -0
  99. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js +89 -0
  100. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js +92 -0
  101. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +199 -0
  102. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +80 -0
  103. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +109 -0
  104. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js +196 -0
  105. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js +9 -0
  106. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/index.js +27 -0
  107. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/SearchResultItemLayout.js +185 -0
  108. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/index.js +9 -0
  109. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/drafts/index.js +32 -0
  110. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js +129 -0
  111. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordActions.js +75 -0
  112. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js +185 -0
  113. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RemovalReasonsSelect.js +85 -0
  114. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RestoreConfirmation.js +108 -0
  115. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/TombstoneForm.js +212 -0
  116. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js +38 -0
  117. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/index.js +9 -0
  118. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +30 -0
  119. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/index.js +40 -0
  120. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/AdministrationSearchLayout.js +56 -0
  121. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/RecordSearchLayout.js +84 -0
  122. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/SearchResultItemLayout.js +171 -0
  123. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/DeletionStatusFilter.js +121 -0
  124. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/index.js +9 -0
  125. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/index.js +10 -0
  126. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchResultItem.js +81 -0
  127. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchbarLayout.js +48 -0
  128. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/index.js +22 -0
  129. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/ModerationActions.js +103 -0
  130. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/index.js +29 -0
  131. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/SearchResultItemLayout.js +151 -0
  132. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationSearchLayout.js +56 -0
  133. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/index.js +10 -0
  134. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/UserActions.js +263 -0
  135. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/api.js +42 -0
  136. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/index.js +8 -0
  137. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/routes.js +38 -0
  138. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/index.js +30 -0
  139. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/SearchResultItemLayout.js +202 -0
  140. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/UserSearchLayout.js +81 -0
  141. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/UserStatusFilterComponent.js +114 -0
  142. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/index.js +1 -0
  143. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/index.js +10 -0
  144. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/collectionRecordsSearch/index.js +61 -0
  145. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +2 -2
  146. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchBarElement.js +1 -1
  147. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSingleSearchBarElement.js +1 -1
  148. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/index.js +8 -3
  149. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js +51 -0
  150. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CopyButton.js +38 -19
  151. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayPartOfCommunities.js +78 -0
  152. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayVerifiedCommunity.js +54 -0
  153. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/FileModificationUntil.js +45 -0
  154. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js +354 -0
  155. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js +44 -0
  156. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +81 -0
  157. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordsResultsListItem.js +61 -31
  158. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +680 -486
  159. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/ShareDraftButton.js +65 -0
  160. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/config.js +48 -0
  161. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +14 -2
  162. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/RecordsList.js +61 -21
  163. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/AccessRequestForm.js +254 -0
  164. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js +171 -0
  165. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagementDropdown.js +186 -0
  166. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/EditButton.js +10 -1
  167. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js +7 -2
  168. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +140 -0
  169. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageDefaultBrandingAction/ManageDefaultBrandingAction.js +129 -0
  170. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesModal.js +63 -0
  171. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesSearch.js +89 -0
  172. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunityRequestItem.js +33 -0
  173. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCitationField.js +55 -51
  174. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesList.js +87 -89
  175. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesListModal.js +44 -30
  176. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearch.js +39 -20
  177. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearchItem.js +44 -17
  178. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitySubmission/RecordCommunitySubmissionModal.js +171 -0
  179. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +111 -62
  180. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +99 -61
  181. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +188 -0
  182. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/AccessDropdown.js +93 -0
  183. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/CreateAccessLink.js +98 -0
  184. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js +170 -0
  185. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js +216 -0
  186. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksTab.js +104 -0
  187. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessRequests/AccessRequestsTab.js +230 -0
  188. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AccessUsersGroups.js +178 -0
  189. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AddUserGroupAccessModal.js +172 -0
  190. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/GroupsTab.js +88 -0
  191. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/PeopleTab.js +88 -0
  192. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js +158 -0
  193. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/{ShareButton.js → ShareOptions/ShareButton.js} +13 -4
  194. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareModal.js +238 -0
  195. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/api/api.js +39 -0
  196. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/access.js +24 -0
  197. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +72 -25
  198. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js +10 -6
  199. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/mapping.js +6 -1
  200. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/AccessRequestExpiration.js +56 -0
  201. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/index.js +1 -0
  202. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js +177 -0
  203. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js +50 -0
  204. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/overrides/TimelineFeedHeader.js +34 -0
  205. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +15 -13
  206. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/index.js +1 -1
  207. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/subcommunity/browse.js +28 -0
  208. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js +77 -9
  209. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js +122 -74
  210. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js +1 -11
  211. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests.js +27 -412
  212. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js +15 -14
  213. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js +47 -27
  214. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js +43 -27
  215. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js +32 -7
  216. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -0
  217. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/creatibutors.less +15 -4
  218. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/licenses.less +5 -3
  219. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/form.overrides +15 -0
  220. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/grid.overrides +24 -33
  221. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/menu.overrides +18 -3
  222. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.overrides +19 -3
  223. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.variables +2 -0
  224. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/table.overrides +78 -6
  225. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/button.overrides +21 -0
  226. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/container.overrides +30 -7
  227. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/header.overrides +17 -4
  228. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/icon.overrides +2 -0
  229. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/image.overrides +34 -4
  230. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/input.overrides +10 -0
  231. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/label.overrides +48 -4
  232. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/list.overrides +10 -0
  233. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.overrides +16 -13
  234. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides +156 -97
  235. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.variables +7 -3
  236. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides +35 -9
  237. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.overrides +28 -6
  238. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.variables +1 -0
  239. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.overrides +40 -11
  240. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.variables +5 -0
  241. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.overrides +7 -0
  242. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.variables +0 -0
  243. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/transition.overrides +8 -8
  244. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/theme.less +2 -5
  245. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/card.overrides +4 -2
  246. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.overrides +20 -33
  247. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js +1 -1
  248. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/_generatedTranslations.js +66 -0
  249. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po +805 -138
  250. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/translations.json +306 -86
  251. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/messages.po +690 -71
  252. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/translations.json +282 -86
  253. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/messages.po +700 -81
  254. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/translations.json +282 -86
  255. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/messages.po +822 -139
  256. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/translations.json +294 -86
  257. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/messages.po +692 -67
  258. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/translations.json +282 -86
  259. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/messages.po +819 -139
  260. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/translations.json +282 -86
  261. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/messages.po +699 -79
  262. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/translations.json +282 -86
  263. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/messages.po +1000 -5
  264. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/translations.json +315 -2
  265. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/messages.po +811 -138
  266. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/translations.json +282 -86
  267. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/messages.po +747 -134
  268. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/translations.json +282 -86
  269. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/messages.po +689 -70
  270. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/translations.json +282 -86
  271. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/messages.po +810 -127
  272. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/translations.json +282 -86
  273. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/messages.po +696 -71
  274. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/translations.json +288 -86
  275. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/messages.po +804 -137
  276. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/translations.json +282 -86
  277. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js +17 -66
  278. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/messages.po +715 -88
  279. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/translations.json +282 -86
  280. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/messages.po +684 -71
  281. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/translations.json +276 -86
  282. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/messages.po +690 -71
  283. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/translations.json +282 -86
  284. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/messages.po +889 -0
  285. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/translations.json +277 -0
  286. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/messages.po +703 -72
  287. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/translations.json +294 -86
  288. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/messages.po +690 -71
  289. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/translations.json +282 -86
  290. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/messages.po +705 -71
  291. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/translations.json +294 -86
  292. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/messages.po +695 -70
  293. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/translations.json +282 -86
  294. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/messages.po +718 -86
  295. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/translations.json +288 -86
  296. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/messages.po +807 -125
  297. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/translations.json +294 -86
  298. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/messages.po +714 -83
  299. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/translations.json +294 -86
  300. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/messages.po +809 -142
  301. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/translations.json +282 -86
  302. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/messages.po +800 -129
  303. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/translations.json +282 -86
  304. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/messages.po +717 -83
  305. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/translations.json +294 -86
  306. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/messages.po +737 -124
  307. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/translations.json +276 -86
  308. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/messages.po +684 -71
  309. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/translations.json +276 -86
  310. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +5 -38
  311. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot +863 -127
  312. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html +15 -0
  313. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/default_static_page.html +8 -8
  314. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/files_integrity_report/email/files_integrity_report.html +12 -12
  315. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/footer.html +33 -75
  316. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header.html +42 -27
  317. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_frontpage.html +4 -2
  318. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_login.html +144 -113
  319. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html +2 -2
  320. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +11 -6
  321. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.sv.html +254 -0
  322. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.sv.html +196 -0
  323. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.en.html +149 -0
  324. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.sv.html +143 -0
  325. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/intro_section.html +15 -16
  326. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/macros/records_list.html +33 -3
  327. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page.html +36 -0
  328. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page_cover.html +13 -0
  329. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/robots.txt +15 -0
  330. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/searchbar.html +43 -15
  331. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/settings/notifications.html +17 -0
  332. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/site_footer.html +29 -0
  333. invenio_app_rdm/theme/templates/semantic-ui/invenio_communities/default_static_page.html +26 -0
  334. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/header.html +147 -0
  335. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/site_footer.html +42 -0
  336. invenio_app_rdm/theme/views.py +80 -28
  337. invenio_app_rdm/theme/webpack.py +38 -7
  338. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
  339. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +975 -378
  340. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
  341. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +908 -279
  342. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
  343. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +913 -284
  344. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
  345. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1070 -406
  346. invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
  347. invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +909 -274
  348. invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
  349. invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1018 -407
  350. invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
  351. invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +916 -287
  352. invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
  353. invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +964 -372
  354. invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
  355. invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +939 -363
  356. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
  357. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +907 -278
  358. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
  359. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1033 -376
  360. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
  361. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +908 -279
  362. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
  363. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +989 -372
  364. invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
  365. invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +970 -337
  366. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
  367. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +908 -279
  368. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
  369. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +910 -281
  370. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
  371. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
  372. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
  373. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +911 -282
  374. invenio_app_rdm/translations/messages.pot +982 -289
  375. invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
  376. invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +908 -279
  377. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
  378. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +908 -279
  379. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
  380. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +907 -278
  381. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
  382. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1041 -382
  383. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
  384. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1023 -371
  385. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
  386. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +917 -288
  387. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
  388. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +1007 -398
  389. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
  390. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +993 -342
  391. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
  392. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +984 -353
  393. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  394. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +940 -348
  395. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  396. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +908 -279
  397. invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_8_0_to_9_0.py +2 -2
  398. invenio_app_rdm/upgrade_scripts/migrate_10_0_to_11_0.py +1 -1
  399. invenio_app_rdm/upgrade_scripts/migrate_11_0_to_12_0.py +205 -0
  400. invenio_app_rdm/upgrade_scripts/migrate_12_0_to_13_0.py +235 -0
  401. invenio_app_rdm/upgrade_scripts/migrate_2_0_to_3_0.py +1 -1
  402. invenio_app_rdm/upgrade_scripts/migrate_4_0_to_6_0.py +2 -3
  403. invenio_app_rdm/upgrade_scripts/migrate_6_0_to_7_0.py +0 -2
  404. invenio_app_rdm/upgrade_scripts/migrate_8_0_to_9_0.py +2 -2
  405. invenio_app_rdm/upgrade_scripts/migrate_9_0_to_10_0.py +1 -1
  406. invenio_app_rdm/users/schemas.py +27 -0
  407. invenio_app_rdm/users_ui/searchapp.py +9 -1
  408. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/communities.html +1 -0
  409. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/header.html +23 -9
  410. invenio_app_rdm/users_ui/views/__init__.py +1 -1
  411. invenio_app_rdm/users_ui/views/dashboard.py +6 -1
  412. invenio_app_rdm/users_ui/views/ui.py +5 -28
  413. invenio_app_rdm/utils/files.py +1 -1
  414. invenio_app_rdm/views.py +21 -0
  415. invenio_app_rdm-14.0.0b1.dev8.dist-info/METADATA +552 -0
  416. invenio_app_rdm-14.0.0b1.dev8.dist-info/RECORD +505 -0
  417. {invenio_app_rdm-12.0.0.dev8.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/WHEEL +1 -1
  418. invenio_app_rdm-14.0.0b1.dev8.dist-info/entry_points.txt +44 -0
  419. invenio_app_rdm/admin.py +0 -36
  420. invenio_app_rdm/stats/__init__.py +0 -24
  421. invenio_app_rdm/stats/event_builders.py +0 -112
  422. invenio_app_rdm/stats/permissions.py +0 -33
  423. invenio_app_rdm/stats/templates/aggregations/__init__.py +0 -10
  424. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/__init__.py +0 -10
  425. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/os-v1/__init__.py +0 -10
  426. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/os-v1/aggr-file-download-v1.0.0.json +0 -69
  427. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/os-v2/__init__.py +0 -10
  428. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/os-v2/aggr-file-download-v1.0.0.json +0 -69
  429. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/v7/__init__.py +0 -10
  430. invenio_app_rdm/stats/templates/aggregations/aggr_file_download/v7/aggr-file-download-v1.0.0.json +0 -69
  431. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/__init__.py +0 -10
  432. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/os-v1/__init__.py +0 -10
  433. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/os-v1/aggr-record-view-v1.0.0.json +0 -46
  434. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/os-v2/__init__.py +0 -10
  435. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/os-v2/aggr-record-view-v1.0.0.json +0 -46
  436. invenio_app_rdm/stats/templates/aggregations/aggr_record_view/v7/aggr-record-view-v1.0.0.json +0 -46
  437. invenio_app_rdm/stats/templates/events/__init__.py +0 -10
  438. invenio_app_rdm/stats/templates/events/file_download/__init__.py +0 -10
  439. invenio_app_rdm/stats/templates/events/file_download/os-v1/__init__.py +0 -10
  440. invenio_app_rdm/stats/templates/events/file_download/os-v1/file-download-v1.0.0.json +0 -93
  441. invenio_app_rdm/stats/templates/events/file_download/os-v2/__init__.py +0 -10
  442. invenio_app_rdm/stats/templates/events/file_download/os-v2/file-download-v1.0.0.json +0 -93
  443. invenio_app_rdm/stats/templates/events/file_download/v7/file-download-v1.0.0.json +0 -93
  444. invenio_app_rdm/stats/templates/events/record_view/os-v1/__init__.py +0 -10
  445. invenio_app_rdm/stats/templates/events/record_view/os-v1/record-view-v1.0.0.json +0 -70
  446. invenio_app_rdm/stats/templates/events/record_view/os-v2/__init__.py +0 -10
  447. invenio_app_rdm/stats/templates/events/record_view/os-v2/record-view-v1.0.0.json +0 -70
  448. invenio_app_rdm/stats/templates/events/record_view/v7/record-view-v1.0.0.json +0 -70
  449. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareModal.js +0 -262
  450. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests_items/ComputerTabletRequestsItem.js +0 -74
  451. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests_items/MobileRequestsItem.js +0 -70
  452. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next-scanner.config.js +0 -64
  453. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/af/messages.po +0 -272
  454. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/af/translations.json +0 -87
  455. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et_EE/messages.po +0 -272
  456. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et_EE/translations.json +0 -87
  457. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/gl/messages.po +0 -272
  458. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/gl/translations.json +0 -87
  459. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/rw/messages.po +0 -272
  460. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/rw/translations.json +0 -87
  461. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package-lock.json +0 -1512
  462. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/compileCatalog.js +0 -40
  463. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/scripts/initCatalog.js +0 -20
  464. invenio_app_rdm/theme/static/robots.txt +0 -5
  465. invenio_app_rdm/translations/af/LC_MESSAGES/messages.mo +0 -0
  466. invenio_app_rdm/translations/af/LC_MESSAGES/messages.po +0 -728
  467. invenio_app_rdm/translations/et_EE/LC_MESSAGES/messages.mo +0 -0
  468. invenio_app_rdm/translations/et_EE/LC_MESSAGES/messages.po +0 -728
  469. invenio_app_rdm/translations/gl/LC_MESSAGES/messages.mo +0 -0
  470. invenio_app_rdm/translations/gl/LC_MESSAGES/messages.po +0 -728
  471. invenio_app_rdm/translations/rw/LC_MESSAGES/messages.mo +0 -0
  472. invenio_app_rdm/translations/rw/LC_MESSAGES/messages.po +0 -728
  473. invenio_app_rdm-12.0.0.dev8.dist-info/AUTHORS.rst +0 -11
  474. invenio_app_rdm-12.0.0.dev8.dist-info/METADATA +0 -103
  475. invenio_app_rdm-12.0.0.dev8.dist-info/RECORD +0 -402
  476. invenio_app_rdm-12.0.0.dev8.dist-info/entry_points.txt +0 -26
  477. /invenio_app_rdm/{translations/.gitkeep → theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationBulkActions.js} +0 -0
  478. {invenio_app_rdm-12.0.0.dev8.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info/licenses}/LICENSE +0 -0
  479. {invenio_app_rdm-12.0.0.dev8.dist-info → invenio_app_rdm-14.0.0b1.dev8.dist-info}/top_level.txt +0 -0
invenio_app_rdm/config.py CHANGED
@@ -1,10 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019-2023 CERN.
3
+ # Copyright (C) 2019-2025 CERN.
4
4
  # Copyright (C) 2019-2020 Northwestern University.
5
- # Copyright (C) 2021 Graz University of Technology.
6
- # Copyright (C) 2022 KTH Royal Institute of Technology
7
- # Copyright (C) 2023 TU Wien
5
+ # Copyright (C) 2021-2025 Graz University of Technology.
6
+ # Copyright (C) 2022-2024 KTH Royal Institute of Technology.
7
+ # Copyright (C) 2023 TU Wien
8
8
  #
9
9
  # Invenio App RDM is free software; you can redistribute it and/or modify it
10
10
  # under the terms of the MIT License; see LICENSE file for more details.
@@ -33,30 +33,117 @@ WARNING: An instance should NOT install multiple flavour extensions since
33
33
 
34
34
  from datetime import datetime, timedelta
35
35
 
36
+ import invenio_communities.notifications.builders as community_notifications
36
37
  from celery.schedules import crontab
37
38
  from flask_principal import Denial
38
39
  from flask_resources import HTTPJSONException, create_error_handler
39
40
  from invenio_access.permissions import any_user
40
41
  from invenio_communities.communities.resources.config import community_error_handlers
42
+ from invenio_communities.notifications.builders import (
43
+ CommunityInvitationAcceptNotificationBuilder,
44
+ CommunityInvitationCancelNotificationBuilder,
45
+ CommunityInvitationDeclineNotificationBuilder,
46
+ CommunityInvitationExpireNotificationBuilder,
47
+ CommunityInvitationSubmittedNotificationBuilder,
48
+ )
49
+ from invenio_notifications.backends import EmailNotificationBackend
50
+ from invenio_rdm_records.notifications.builders import (
51
+ CommunityInclusionAcceptNotificationBuilder,
52
+ CommunityInclusionCancelNotificationBuilder,
53
+ CommunityInclusionDeclineNotificationBuilder,
54
+ CommunityInclusionExpireNotificationBuilder,
55
+ CommunityInclusionSubmittedNotificationBuilder,
56
+ GrantUserAccessNotificationBuilder,
57
+ GuestAccessRequestAcceptNotificationBuilder,
58
+ GuestAccessRequestCancelNotificationBuilder,
59
+ GuestAccessRequestDeclineNotificationBuilder,
60
+ GuestAccessRequestSubmitNotificationBuilder,
61
+ GuestAccessRequestSubmittedNotificationBuilder,
62
+ GuestAccessRequestTokenCreateNotificationBuilder,
63
+ RecordDeletionAcceptNotificationBuilder,
64
+ RecordDeletionDeclineNotificationBuilder,
65
+ UserAccessRequestAcceptNotificationBuilder,
66
+ UserAccessRequestCancelNotificationBuilder,
67
+ UserAccessRequestDeclineNotificationBuilder,
68
+ UserAccessRequestSubmitNotificationBuilder,
69
+ )
70
+ from invenio_rdm_records.proxies import current_rdm_records_service
71
+ from invenio_rdm_records.requests.entity_resolvers import (
72
+ EmailResolver,
73
+ RDMRecordServiceResultResolver,
74
+ )
75
+ from invenio_rdm_records.resources.stats.event_builders import build_record_unique_id
41
76
  from invenio_rdm_records.services.communities.components import (
42
77
  CommunityServiceComponents,
43
78
  )
44
- from invenio_rdm_records.services.errors import InvalidCommunityVisibility
79
+ from invenio_rdm_records.services.errors import (
80
+ InvalidAccessRestrictions,
81
+ InvalidCommunityVisibility,
82
+ )
83
+ from invenio_rdm_records.services.github.release import RDMGithubRelease
84
+ from invenio_rdm_records.services.permissions import RDMRequestsPermissionPolicy
85
+ from invenio_rdm_records.services.stats import permissions_policy_lookup_factory
86
+ from invenio_rdm_records.services.tasks import StatsRDMReindexTask
87
+ from invenio_records_resources.references.entity_resolvers import ServiceResultResolver
88
+ from invenio_requests.notifications.builders import (
89
+ CommentRequestEventCreateNotificationBuilder,
90
+ )
91
+ from invenio_requests.resources.requests.config import request_error_handlers
92
+ from invenio_requests.services.requests import facets
45
93
  from invenio_stats.aggregations import StatAggregator
46
94
  from invenio_stats.contrib.event_builders import build_file_unique_id
47
- from invenio_stats.processors import EventsIndexer, anonymize_user, flag_robots
95
+ from invenio_stats.processors import (
96
+ EventsIndexer,
97
+ anonymize_user,
98
+ filter_robots,
99
+ flag_machines,
100
+ )
48
101
  from invenio_stats.queries import TermsQuery
102
+ from invenio_stats.tasks import StatsAggregationTask, StatsEventTask
49
103
  from invenio_vocabularies.config import (
50
104
  VOCABULARIES_DATASTREAM_READERS,
51
105
  VOCABULARIES_DATASTREAM_TRANSFORMERS,
52
106
  VOCABULARIES_DATASTREAM_WRITERS,
53
107
  )
108
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
109
+ VOCABULARIES_DATASTREAM_READERS as AFFILIATIONS_READERS,
110
+ )
111
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
112
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as AFFILIATIONS_TRANSFORMERS,
113
+ )
114
+ from invenio_vocabularies.contrib.affiliations.datastreams import (
115
+ VOCABULARIES_DATASTREAM_WRITERS as AFFILIATIONS_WRITERS,
116
+ )
117
+ from invenio_vocabularies.contrib.awards.datastreams import (
118
+ VOCABULARIES_DATASTREAM_READERS as AWARDS_READERS,
119
+ )
54
120
  from invenio_vocabularies.contrib.awards.datastreams import (
55
121
  VOCABULARIES_DATASTREAM_TRANSFORMERS as AWARDS_TRANSFORMERS,
56
122
  )
57
123
  from invenio_vocabularies.contrib.awards.datastreams import (
58
124
  VOCABULARIES_DATASTREAM_WRITERS as AWARDS_WRITERS,
59
125
  )
126
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
127
+ VOCABULARIES_DATASTREAM_READERS as COMMON_OPENAIRE_READERS,
128
+ )
129
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
130
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as COMMON_OPENAIRE_TRANSFORMERS,
131
+ )
132
+ from invenio_vocabularies.contrib.common.openaire.datastreams import (
133
+ VOCABULARIES_DATASTREAM_WRITERS as COMMON_OPENAIRE_WRITERS,
134
+ )
135
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
136
+ VOCABULARIES_DATASTREAM_READERS as COMMON_ROR_READERS,
137
+ )
138
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
139
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as COMMON_ROR_TRANSFORMERS,
140
+ )
141
+ from invenio_vocabularies.contrib.common.ror.datastreams import (
142
+ VOCABULARIES_DATASTREAM_WRITERS as COMMON_ROR_WRITERS,
143
+ )
144
+ from invenio_vocabularies.contrib.funders.datastreams import (
145
+ VOCABULARIES_DATASTREAM_READERS as FUNDERS_READERS,
146
+ )
60
147
  from invenio_vocabularies.contrib.funders.datastreams import (
61
148
  VOCABULARIES_DATASTREAM_TRANSFORMERS as FUNDERS_TRANSFORMERS,
62
149
  )
@@ -72,9 +159,21 @@ from invenio_vocabularies.contrib.names.datastreams import (
72
159
  from invenio_vocabularies.contrib.names.datastreams import (
73
160
  VOCABULARIES_DATASTREAM_WRITERS as NAMES_WRITERS,
74
161
  )
162
+ from invenio_vocabularies.contrib.subjects.datastreams import (
163
+ VOCABULARIES_DATASTREAM_READERS as SUBJECTS_READERS,
164
+ )
165
+ from invenio_vocabularies.contrib.subjects.datastreams import (
166
+ VOCABULARIES_DATASTREAM_TRANSFORMERS as SUBJECTS_TRANSFORMERS,
167
+ )
168
+ from invenio_vocabularies.contrib.subjects.datastreams import (
169
+ VOCABULARIES_DATASTREAM_WRITERS as SUBJECTS_WRITERS,
170
+ )
171
+ from werkzeug.local import LocalProxy
75
172
 
76
- from .stats.event_builders import build_record_unique_id
77
- from .stats.permissions import default_deny_permission_factory
173
+ from .communities_ui.sitemap import SitemapSectionOfCommunities
174
+ from .records_ui.sitemap import SitemapSectionOfRDMRecords
175
+ from .theme.views import notification_settings
176
+ from .users.schemas import NotificationsUserSchema, UserPreferencesNotificationsSchema
78
177
 
79
178
  # TODO: Remove when records-rest is out of communities and files
80
179
  RECORDS_REST_ENDPOINTS = {}
@@ -90,7 +189,7 @@ def _(x):
90
189
  # =====
91
190
  # See https://flask.palletsprojects.com/en/1.1.x/config/
92
191
 
93
- APP_ALLOWED_HOSTS = ["0.0.0.0", "localhost", "127.0.0.1"]
192
+ TRUSTED_HOSTS = ["0.0.0.0", "localhost", "127.0.0.1"]
94
193
  """Allowed hosts.
95
194
 
96
195
  Since HAProxy and Nginx route all requests no matter the host header
@@ -120,7 +219,7 @@ SESSION_COOKIE_SAMESITE = "Lax"
120
219
  # =============
121
220
  # https://flask-limiter.readthedocs.io/en/stable/#configuration
122
221
 
123
- RATELIMIT_STORAGE_URL = "redis://localhost:6379/3"
222
+ RATELIMIT_STORAGE_URI = "redis://localhost:6379/3"
124
223
  """Storage for ratelimiter."""
125
224
 
126
225
  # Increase defaults
@@ -155,10 +254,10 @@ BABEL_DEFAULT_TIMEZONE = "Europe/Zurich"
155
254
  APP_THEME = ["semantic-ui"]
156
255
  """Application theme."""
157
256
 
158
- BASE_TEMPLATE = "invenio_theme/page.html"
257
+ BASE_TEMPLATE = "invenio_app_rdm/page.html"
159
258
  """Global base template."""
160
259
 
161
- COVER_TEMPLATE = "invenio_theme/page_cover.html"
260
+ COVER_TEMPLATE = "invenio_app_rdm/page_cover.html"
162
261
  """Cover page base template (used for e.g. login/sign-up)."""
163
262
 
164
263
  SETTINGS_TEMPLATE = "invenio_theme/page_settings.html"
@@ -182,12 +281,39 @@ THEME_FRONTPAGE_TEMPLATE = "invenio_app_rdm/frontpage.html"
182
281
  THEME_HEADER_LOGIN_TEMPLATE = "invenio_app_rdm/header_login.html"
183
282
  """Header login base template."""
184
283
 
284
+
285
+ def _get_package_version():
286
+ from importlib.metadata import PackageNotFoundError, version
287
+
288
+ from packaging.version import Version
289
+
290
+ try:
291
+ package_version = version("invenio-app-rdm")
292
+ parsed_version = Version(package_version)
293
+ major_minor_version = (
294
+ f"InvenioRDM {parsed_version.major}.{parsed_version.minor}"
295
+ )
296
+ return major_minor_version
297
+ except PackageNotFoundError:
298
+ # default without any version
299
+ return "InvenioRDM"
300
+
301
+
302
+ THEME_GENERATOR = _get_package_version()
303
+ """Generator meta tag to identify the software that generated the page.
304
+
305
+ Set it to `None` to disable the tag.
306
+ """
307
+
185
308
  THEME_LOGO = "images/invenio-rdm.svg"
186
309
  """Theme logo."""
187
310
 
188
311
  THEME_SITENAME = _("InvenioRDM")
189
312
  """Site name."""
190
313
 
314
+ THEME_TWITTERHANDLE = ""
315
+ """Twitter handle."""
316
+
191
317
  THEME_SHOW_FRONTPAGE_INTRO_SECTION = True
192
318
  """Front page intro section visibility"""
193
319
 
@@ -218,6 +344,12 @@ FILES_REST_STORAGE_CLASS_LIST = {
218
344
 
219
345
  FILES_REST_DEFAULT_STORAGE_CLASS = "L"
220
346
 
347
+ FILES_REST_DEFAULT_QUOTA_SIZE = 10**10
348
+ """Default quota size is 10Gb."""
349
+
350
+ FILES_REST_DEFAULT_MAX_FILE_SIZE = FILES_REST_DEFAULT_QUOTA_SIZE
351
+ """Default maximum file size for a bucket in bytes."""
352
+
221
353
  # Invenio-Formatter
222
354
  # =================
223
355
 
@@ -264,6 +396,10 @@ MUST ensure that NGINX (or other proxies) removes these headers again before
264
396
  sending the response to the client. Set to False, in case of doubt.
265
397
  """
266
398
 
399
+
400
+ ACCOUNTS_USER_PREFERENCES_SCHEMA = UserPreferencesNotificationsSchema()
401
+ """The schema to use for validation of the user preferences."""
402
+
267
403
  # Invenio-Security-Invenio
268
404
  # ========================
269
405
 
@@ -298,6 +434,10 @@ CELERY_BEAT_SCHEDULE = {
298
434
  "task": "invenio_accounts.tasks.delete_ips",
299
435
  "schedule": timedelta(hours=6),
300
436
  },
437
+ "update_domain_status": {
438
+ "task": "invenio_accounts.tasks.update_domain_status",
439
+ "schedule": timedelta(hours=4),
440
+ },
301
441
  "draft_resources": {
302
442
  "task": ("invenio_drafts_resources.services.records.tasks.cleanup_drafts"),
303
443
  "schedule": timedelta(minutes=60),
@@ -328,19 +468,35 @@ CELERY_BEAT_SCHEDULE = {
328
468
  },
329
469
  # indexing of statistics events & aggregations
330
470
  "stats-process-events": {
331
- "task": "invenio_stats.tasks.process_events",
332
- "schedule": timedelta(minutes=30),
333
- "args": [("record-view", "file-download")],
471
+ **StatsEventTask,
472
+ "schedule": crontab(minute="25,55"), # Every hour at minute 25 and 55
334
473
  },
335
474
  "stats-aggregate-events": {
336
- "task": "invenio_stats.tasks.aggregate_events",
475
+ **StatsAggregationTask,
476
+ "schedule": crontab(minute=0), # Every hour at minute 0
477
+ },
478
+ "reindex-stats": StatsRDMReindexTask, # Every hour at minute 10
479
+ # Invenio communities provides some caching that has the potential to be never removed,
480
+ # therefore, we need a cronjob to ensure that at least once per day we clear the cache
481
+ "clear-cache": {
482
+ "task": "invenio_communities.tasks.clear_cache",
483
+ "schedule": crontab(minute=0, hour=1), # Every day at 01:00 UTC
484
+ },
485
+ "clean-access-request-tokens": {
486
+ "task": "invenio_rdm_records.requests.access.tasks.clean_expired_request_access_tokens",
487
+ "schedule": crontab(minute=4, hour=0),
488
+ },
489
+ "delete-job-logs": {
490
+ "task": "invenio_jobs.logging.tasks.delete_logs",
491
+ "schedule": crontab(minute=5, hour=0),
492
+ },
493
+ "update_sitemap": {
494
+ "task": "invenio_sitemap.tasks.update_sitemap_cache",
495
+ "schedule": crontab(minute=0, hour=2),
496
+ },
497
+ "update-collections-size": {
498
+ "task": "invenio_collections.tasks.update_collections_size",
337
499
  "schedule": timedelta(hours=1),
338
- "args": [
339
- (
340
- "record-view-agg",
341
- "file-download-agg",
342
- )
343
- ],
344
500
  },
345
501
  }
346
502
  """Scheduled tasks configuration (aka cronjobs)."""
@@ -473,30 +629,45 @@ OAISERVER_ID_FETCHER = "invenio_rdm_records.oai:oaiid_fetcher"
473
629
  """OAI ID fetcher function."""
474
630
 
475
631
  OAISERVER_METADATA_FORMATS = {
632
+ "marcxml": {
633
+ "serializer": "invenio_rdm_records.oai:marcxml_etree",
634
+ "schema": "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd",
635
+ "namespace": "https://www.loc.gov/standards/marcxml/",
636
+ },
476
637
  "oai_dc": {
477
- "serializer": ("invenio_rdm_records.oai:dublincore_etree"),
638
+ "serializer": "invenio_rdm_records.oai:dublincore_etree",
478
639
  "schema": "http://www.openarchives.org/OAI/2.0/oai_dc.xsd",
479
640
  "namespace": "http://www.openarchives.org/OAI/2.0/oai_dc/",
480
641
  },
642
+ "dcat": {
643
+ "serializer": "invenio_rdm_records.oai:dcat_etree",
644
+ "schema": "http://schema.datacite.org/meta/kernel-4/metadata.xsd",
645
+ "namespace": "https://www.w3.org/ns/dcat",
646
+ },
647
+ "marc21": {
648
+ "serializer": "invenio_rdm_records.oai:marcxml_etree",
649
+ "schema": "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd",
650
+ "namespace": "https://www.loc.gov/standards/marcxml/",
651
+ },
481
652
  "datacite": {
482
653
  "serializer": "invenio_rdm_records.oai:datacite_etree",
483
- "schema": "http://schema.datacite.org/meta/nonexistant/nonexistant.xsd",
484
- "namespace": "http://datacite.org/schema/nonexistant",
654
+ "schema": "http://schema.datacite.org/meta/kernel-4.3/metadata.xsd",
655
+ "namespace": "http://datacite.org/schema/kernel-4",
485
656
  },
486
657
  "oai_datacite": {
487
- "serializer": ("invenio_rdm_records.oai:oai_datacite_etree"),
658
+ "serializer": "invenio_rdm_records.oai:oai_datacite_etree",
488
659
  "schema": "http://schema.datacite.org/oai/oai-1.1/oai.xsd",
489
660
  "namespace": "http://schema.datacite.org/oai/oai-1.1/",
490
661
  },
491
- "oai_marcxml": {
492
- "serializer": "invenio_rdm_records.oai:oai_marcxml_etree",
493
- "schema": "https://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd",
494
- "namespace": "https://www.loc.gov/standards/marcxml/",
662
+ "datacite4": {
663
+ "serializer": "invenio_rdm_records.oai:datacite_etree",
664
+ "schema": "http://schema.datacite.org/meta/kernel-4.3/metadata.xsd",
665
+ "namespace": "http://datacite.org/schema/kernel-4",
495
666
  },
496
- "oai_dcat": {
497
- "serializer": "invenio_rdm_records.oai:oai_dcat_etree",
498
- "schema": "http://schema.datacite.org/meta/kernel-4/metadata.xsd",
499
- "namespace": "https://www.w3.org/ns/dcat",
667
+ "oai_datacite4": {
668
+ "serializer": ("invenio_rdm_records.oai:oai_datacite_etree"),
669
+ "schema": "http://schema.datacite.org/oai/oai-1.1/oai.xsd",
670
+ "namespace": "http://schema.datacite.org/oai/oai-1.1/",
500
671
  },
501
672
  }
502
673
 
@@ -509,10 +680,13 @@ OAISERVER_CREATED_KEY = "created"
509
680
  OAISERVER_RECORD_CLS = "invenio_rdm_records.records.api:RDMRecord"
510
681
  """Record retrieval class."""
511
682
 
512
- OAISERVER_RECORD_SETS_FETCHER = "invenio_oaiserver.utils:record_sets_fetcher"
683
+ OAISERVER_RECORD_SETS_FETCHER = "invenio_oaiserver.percolator:find_sets_for_record"
513
684
  """Record's OAI sets function."""
514
685
 
515
- OAISERVER_RECORD_INDEX = "rdmrecords-records"
686
+ OAISERVER_RECORD_INDEX = LocalProxy(
687
+ lambda: current_rdm_records_service.record_cls.index._name
688
+ )
689
+
516
690
  """Specify a search index with records that should be exposed via OAI-PMH."""
517
691
 
518
692
  OAISERVER_GETRECORD_FETCHER = "invenio_rdm_records.oai:getrecord_fetcher"
@@ -551,13 +725,6 @@ ACCESS_CACHE = "invenio_cache:current_cache"
551
725
  SEARCH_HOSTS = [{"host": "localhost", "port": 9200}]
552
726
  """Search hosts."""
553
727
 
554
- # Invenio-Indexer
555
- # ===============
556
- # See https://invenio-indexer.readthedocs.io/en/latest/configuration.html
557
-
558
- INDEXER_DEFAULT_INDEX = "rdmrecords-records-record-v5.0.0"
559
- """Default index to use if no schema is defined."""
560
-
561
728
  # Invenio-Base
562
729
  # ============
563
730
  # See https://invenio-base.readthedocs.io/en/latest/api.html#invenio_base.wsgi.wsgi_proxyfix # noqa
@@ -565,12 +732,6 @@ INDEXER_DEFAULT_INDEX = "rdmrecords-records-record-v5.0.0"
565
732
  WSGI_PROXIES = 2
566
733
  """Correct number of proxies in front of your application."""
567
734
 
568
- # Invenio-Admin
569
- # =============
570
-
571
- # Admin interface is deprecated and should not be used.
572
- ADMIN_PERMISSION_FACTORY = "invenio_app_rdm.admin.permission_factory"
573
-
574
735
  # Invenio-REST
575
736
  # ============
576
737
 
@@ -582,14 +743,24 @@ REST_CSRF_ENABLED = True
582
743
  VOCABULARIES_DATASTREAM_READERS = {
583
744
  **VOCABULARIES_DATASTREAM_READERS,
584
745
  **NAMES_READERS,
746
+ **COMMON_OPENAIRE_READERS,
747
+ **COMMON_ROR_READERS,
748
+ **AWARDS_READERS,
749
+ **FUNDERS_READERS,
750
+ **AFFILIATIONS_READERS,
751
+ **SUBJECTS_READERS,
585
752
  }
586
753
  """Data Streams readers."""
587
754
 
588
755
  VOCABULARIES_DATASTREAM_TRANSFORMERS = {
589
756
  **VOCABULARIES_DATASTREAM_TRANSFORMERS,
590
757
  **NAMES_TRANSFORMERS,
591
- **FUNDERS_TRANSFORMERS,
758
+ **COMMON_OPENAIRE_TRANSFORMERS,
759
+ **COMMON_ROR_TRANSFORMERS,
592
760
  **AWARDS_TRANSFORMERS,
761
+ **FUNDERS_TRANSFORMERS,
762
+ **AFFILIATIONS_TRANSFORMERS,
763
+ **SUBJECTS_TRANSFORMERS,
593
764
  }
594
765
  """Data Streams transformers."""
595
766
 
@@ -598,6 +769,10 @@ VOCABULARIES_DATASTREAM_WRITERS = {
598
769
  **NAMES_WRITERS,
599
770
  **FUNDERS_WRITERS,
600
771
  **AWARDS_WRITERS,
772
+ **AFFILIATIONS_WRITERS,
773
+ **COMMON_OPENAIRE_WRITERS,
774
+ **COMMON_ROR_WRITERS,
775
+ **SUBJECTS_WRITERS,
601
776
  }
602
777
  """Data Streams writers."""
603
778
 
@@ -624,11 +799,14 @@ APP_RDM_ROUTES = {
624
799
  "robots": "/robots.txt",
625
800
  "help_search": "/help/search",
626
801
  "help_statistics": "/help/statistics",
802
+ "help_versioning": "/help/versioning",
627
803
  "record_search": "/search",
628
804
  "record_detail": "/records/<pid_value>",
629
805
  "record_export": "/records/<pid_value>/export/<export_format>",
630
806
  "record_file_preview": "/records/<pid_value>/preview/<path:filename>",
631
807
  "record_file_download": "/records/<pid_value>/files/<path:filename>",
808
+ "record_thumbnail": "/records/<pid_value>/thumb<int:size>",
809
+ "record_media_file_download": "/records/<pid_value>/media-files/<path:filename>",
632
810
  "record_from_pid": "/<any({schemes}):pid_scheme>/<path:pid_value>",
633
811
  "record_latest": "/records/<pid_value>/latest",
634
812
  "dashboard_home": "/me",
@@ -640,12 +818,22 @@ APP_RDM_RECORD_EXPORTERS = {
640
818
  "json": {
641
819
  "name": _("JSON"),
642
820
  "serializer": ("flask_resources.serializers:JSONSerializer"),
821
+ "params": {"options": {"indent": 2, "sort_keys": True}},
643
822
  "content-type": "application/json",
644
823
  "filename": "{id}.json",
645
824
  },
825
+ "json-ld": {
826
+ "name": _("JSON-LD"),
827
+ "serializer": (
828
+ "invenio_rdm_records.resources.serializers:SchemaorgJSONLDSerializer"
829
+ ),
830
+ "content-type": "application/ld+json",
831
+ "filename": "{id}.json",
832
+ },
646
833
  "csl": {
647
834
  "name": _("CSL"),
648
835
  "serializer": ("invenio_rdm_records.resources.serializers:CSLJSONSerializer"),
836
+ "params": {"options": {"indent": 2, "sort_keys": True}},
649
837
  "content-type": "application/vnd.citationstyles.csl+json",
650
838
  "filename": "{id}.json",
651
839
  },
@@ -654,6 +842,7 @@ APP_RDM_RECORD_EXPORTERS = {
654
842
  "serializer": (
655
843
  "invenio_rdm_records.resources.serializers:DataCite43JSONSerializer"
656
844
  ),
845
+ "params": {"options": {"indent": 2, "sort_keys": True}},
657
846
  "content-type": "application/vnd.datacite.datacite+json",
658
847
  "filename": "{id}.json",
659
848
  },
@@ -662,6 +851,7 @@ APP_RDM_RECORD_EXPORTERS = {
662
851
  "serializer": (
663
852
  "invenio_rdm_records.resources.serializers:DataCite43XMLSerializer"
664
853
  ),
854
+ "params": {},
665
855
  "content-type": "application/vnd.datacite.datacite+xml",
666
856
  "filename": "{id}.xml",
667
857
  },
@@ -670,37 +860,91 @@ APP_RDM_RECORD_EXPORTERS = {
670
860
  "serializer": (
671
861
  "invenio_rdm_records.resources.serializers:DublinCoreXMLSerializer"
672
862
  ),
863
+ "params": {},
673
864
  "content-type": "application/x-dc+xml",
674
865
  "filename": "{id}.xml",
675
866
  },
676
867
  "marcxml": {
677
868
  "name": _("MARCXML"),
678
869
  "serializer": ("invenio_rdm_records.resources.serializers:MARCXMLSerializer"),
870
+ "params": {},
679
871
  "content-type": "application/marcxml+xml",
680
872
  "filename": "{id}.xml",
681
873
  },
682
874
  "bibtex": {
683
875
  "name": _("BibTeX"),
684
- "serializer": ("invenio_rdm_records.resources.serializers:" "BibtexSerializer"),
876
+ "serializer": ("invenio_rdm_records.resources.serializers:BibtexSerializer"),
877
+ "params": {},
685
878
  "content-type": "application/x-bibtex",
686
879
  "filename": "{id}.bib",
687
880
  },
688
- "GeoJSON": {
881
+ "geojson": {
689
882
  "name": _("GeoJSON"),
690
883
  "serializer": ("invenio_rdm_records.resources.serializers:GeoJSONSerializer"),
691
- "content-type": "application/vnd.geojson+json",
884
+ "params": {"options": {"indent": 2, "sort_keys": True}},
885
+ "content-type": "application/vnd.geo+json",
692
886
  "filename": "{id}.geojson",
693
887
  },
694
- "DCAT-AP": {
888
+ "dcat-ap": {
695
889
  "name": _("DCAT"),
696
890
  "serializer": "invenio_rdm_records.resources.serializers:DCATSerializer",
891
+ "params": {},
697
892
  "content-type": "application/dcat+xml",
698
893
  "filename": "{id}.xml",
699
894
  },
895
+ "codemeta": {
896
+ "name": _("Codemeta"),
897
+ "serializer": "invenio_rdm_records.resources.serializers:CodemetaSerializer",
898
+ "params": {},
899
+ "content-type": "application/ld+json",
900
+ "filename": "{id}.json",
901
+ },
902
+ "cff": {
903
+ "name": _("Citation File Format"),
904
+ "serializer": "invenio_rdm_records.resources.serializers:CFFSerializer",
905
+ "params": {},
906
+ "content-type": "application/x-yaml",
907
+ "filename": "{id}.yaml",
908
+ },
909
+ "datapackage": {
910
+ "name": _("Data Package JSON"),
911
+ "serializer": "invenio_rdm_records.resources.serializers:DataPackageSerializer",
912
+ "params": {},
913
+ "content-type": "application/ld+json",
914
+ "filename": "{id}.json",
915
+ },
700
916
  }
701
917
 
918
+ APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = []
919
+ """ Default format used for adding badges to a record.
920
+
921
+ Make sure the 'render' field points to a valid render function in invenio_app_rdm.records_ui.utils.
922
+ Example implementation can also be found in invenio_app_rdm.records_ui.utils.
923
+
924
+ APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS = [
925
+ {
926
+ "id": "github",
927
+ "render": github_link_render,
928
+ },
929
+ {
930
+ "id": "openaire",
931
+ "render": openaire_link_render,
932
+ },
933
+ }
934
+
935
+ def github_link_render(record):
936
+ ...
937
+ """
938
+
702
939
  APP_RDM_RECORDS_EXPORT_URL = "/records/<pid_value>/export/<export_format>"
703
940
 
941
+ APP_RDM_DEPOSIT_NG_FILES_UI_ENABLED = False
942
+ """
943
+ Feature toggle to enable the next-generation (NG) file uploader UI in the deposit form.
944
+
945
+ When enabled, the deposit form will use the new Uppy.io-based file uploader, replacing the current file upload interface.
946
+ """
947
+
704
948
  APP_RDM_DEPOSIT_FORM_DEFAULTS = {
705
949
  "publication_date": lambda: datetime.now().strftime("%Y-%m-%d"),
706
950
  "rights": [
@@ -739,7 +983,7 @@ Available options:
739
983
 
740
984
  APP_RDM_DEPOSIT_FORM_QUOTA = {
741
985
  "maxFiles": 100,
742
- "maxStorage": 10**10,
986
+ "maxStorage": FILES_REST_DEFAULT_QUOTA_SIZE,
743
987
  }
744
988
  """Deposit file upload quota """
745
989
 
@@ -751,15 +995,24 @@ APP_RDM_DEPOSIT_FORM_PUBLISH_MODAL_EXTRA = ""
751
995
 
752
996
  APP_RDM_RECORD_LANDING_PAGE_TEMPLATE = "invenio_app_rdm/records/detail.html"
753
997
 
998
+ APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED = False
999
+
1000
+ APP_RDM_RECORD_THUMBNAIL_SIZES = [10, 50, 100, 250, 750, 1200]
1001
+ """Allowed record thumbnail sizes."""
1002
+
754
1003
  APP_RDM_DETAIL_SIDE_BAR_TEMPLATES = [
755
1004
  "invenio_app_rdm/records/details/side_bar/manage_menu.html",
756
1005
  "invenio_app_rdm/records/details/side_bar/metrics.html",
757
1006
  "invenio_app_rdm/records/details/side_bar/versions.html",
1007
+ "invenio_app_rdm/records/details/side_bar/external_resources.html",
758
1008
  "invenio_app_rdm/records/details/side_bar/communities.html",
759
1009
  "invenio_app_rdm/records/details/side_bar/keywords_subjects.html",
760
1010
  "invenio_app_rdm/records/details/side_bar/details.html",
1011
+ "invenio_app_rdm/records/details/side_bar/locations.html",
761
1012
  "invenio_app_rdm/records/details/side_bar/licenses.html",
1013
+ "invenio_app_rdm/records/details/side_bar/citations.html",
762
1014
  "invenio_app_rdm/records/details/side_bar/export.html",
1015
+ "invenio_app_rdm/records/details/side_bar/technical_metadata.html",
763
1016
  ]
764
1017
  """Template names for detail view sidebar components"""
765
1018
 
@@ -774,6 +1027,25 @@ APP_RDM_FILES_INTEGRITY_REPORT_SUBJECT = "Files integrity report"
774
1027
  APP_RDM_ADMIN_EMAIL_RECIPIENT = "info@inveniosoftware.org"
775
1028
  """Admin e-mail"""
776
1029
 
1030
+ APP_RDM_IDENTIFIER_SCHEMES_UI = {
1031
+ "orcid": {
1032
+ "url_prefix": "http://orcid.org/",
1033
+ "icon": "images/orcid.svg",
1034
+ "label": "ORCID",
1035
+ },
1036
+ "ror": {
1037
+ "url_prefix": "https://ror.org/",
1038
+ "icon": "images/ror-icon.svg",
1039
+ "label": "ROR",
1040
+ },
1041
+ "gnd": {
1042
+ "url_prefix": "http://d-nb.info/gnd/",
1043
+ "icon": "images/gnd-icon.svg",
1044
+ "label": "GND",
1045
+ },
1046
+ }
1047
+ """Identifier Schemes UI config"""
1048
+
777
1049
  # Invenio-Communities
778
1050
  # ===================
779
1051
 
@@ -784,7 +1056,7 @@ COMMUNITIES_ERROR_HANDLERS = {
784
1056
  InvalidCommunityVisibility: create_error_handler(
785
1057
  lambda e: HTTPJSONException(
786
1058
  code=400,
787
- description=str(e),
1059
+ description=e.reason,
788
1060
  )
789
1061
  ),
790
1062
  }
@@ -795,6 +1067,9 @@ COMMUNITIES_RECORDS_SEARCH = {
795
1067
  }
796
1068
  """Community requests search configuration (i.e list of community requests)"""
797
1069
 
1070
+ COMMUNITIES_SHOW_BROWSE_MENU_ENTRY = False
1071
+ """Toggle to show or hide the 'Browse' menu entry for communities."""
1072
+
798
1073
  # Invenio-RDM-Records
799
1074
  # ===================
800
1075
 
@@ -805,7 +1080,11 @@ RDM_REQUESTS_ROUTES = {
805
1080
  }
806
1081
 
807
1082
  RDM_COMMUNITIES_ROUTES = {
808
- "community-detail": "/communities/<pid_value>",
1083
+ "community-detail": "/communities/<pid_value>/records",
1084
+ "community-home": "/communities/<pid_value>/",
1085
+ "community-browse": "/communities/<pid_value>/browse",
1086
+ "community-static-page": "/communities/<pid_value>/pages/<path:page_slug>",
1087
+ "community-collection": "/communities/<pid_value>/collections/<tree_slug>/<collection_slug>",
809
1088
  }
810
1089
 
811
1090
  RDM_SEARCH_USER_COMMUNITIES = {
@@ -816,7 +1095,7 @@ RDM_SEARCH_USER_COMMUNITIES = {
816
1095
 
817
1096
  RDM_SEARCH_USER_REQUESTS = {
818
1097
  "facets": ["type", "status"],
819
- "sort": ["bestmatch", "newest", "oldest"],
1098
+ "sort": ["bestmatch", "newest", "oldest", "newestactivity", "oldestactivity"],
820
1099
  }
821
1100
  """User requests search configuration (i.e list of user requests)"""
822
1101
 
@@ -844,25 +1123,6 @@ IIIF_PREVIEW_TEMPLATE = "invenio_app_rdm/records/iiif_preview.html"
844
1123
 
845
1124
  IIIF_API_DECORATOR_HANDLER = None
846
1125
 
847
- # Invenio-Previewer
848
- # =================
849
- # See https://github.com/inveniosoftware/invenio-previewer/blob/master/invenio_previewer/config.py # noqa
850
-
851
- PREVIEWER_PREFERENCE = [
852
- "csv_dthreejs",
853
- "iiif_simple",
854
- "simple_image",
855
- "json_prismjs",
856
- "xml_prismjs",
857
- "mistune",
858
- "pdfjs",
859
- "ipynb",
860
- "zip",
861
- "txt",
862
- ]
863
- """Preferred previewers."""
864
-
865
-
866
1126
  IIIF_SIMPLE_PREVIEWER_NATIVE_EXTENSIONS = ["gif", "png"]
867
1127
  """Images are converted to JPEG for preview, unless listed here."""
868
1128
 
@@ -870,6 +1130,7 @@ IIIF_SIMPLE_PREVIEWER_SIZE = "!800,800"
870
1130
  """Size of image in IIIF preview window. Must be a valid IIIF Image API size parameter."""
871
1131
 
872
1132
  IIIF_FORMATS = {
1133
+ "pdf": "application/pdf",
873
1134
  "gif": "image/gif",
874
1135
  "jp2": "image/jp2",
875
1136
  "jpeg": "image/jpeg",
@@ -878,16 +1139,41 @@ IIIF_FORMATS = {
878
1139
  "tif": "image/tiff",
879
1140
  "tiff": "image/tiff",
880
1141
  }
1142
+ """Controls which formats are supported by the Flask-IIIF server."""
1143
+
881
1144
  IIIF_FORMATS_PIL_MAP = {
882
1145
  "gif": "gif",
883
1146
  "jp2": "jpeg2000",
884
1147
  "jpeg": "jpeg",
885
1148
  "jpg": "jpeg",
886
- "pdf": "pdf",
887
1149
  "png": "png",
888
1150
  "tif": "tiff",
889
1151
  "tiff": "tiff",
890
1152
  }
1153
+ """Mapping of IIIF formats to PIL-compatible formats."""
1154
+
1155
+ # Invenio-Previewer
1156
+ # =================
1157
+ # See https://github.com/inveniosoftware/invenio-previewer/blob/master/invenio_previewer/config.py # noqa
1158
+
1159
+ PREVIEWER_PREFERENCE = [
1160
+ "csv_papaparsejs",
1161
+ "pdfjs",
1162
+ "iiif_simple",
1163
+ "simple_image",
1164
+ "json_prismjs",
1165
+ "xml_prismjs",
1166
+ "mistune",
1167
+ "video_videojs",
1168
+ "audio_videojs",
1169
+ "ipynb",
1170
+ "zip",
1171
+ "txt",
1172
+ ]
1173
+ """Preferred previewers."""
1174
+
1175
+ RECORDS_RESOURCES_IMAGE_FORMATS = ["." + ext for ext in IIIF_FORMATS.keys()]
1176
+ """RECORDS_RESOURCES_IMAGE_FORMATS must contain all possible IIIF formats to ensure their metadata is extracted."""
891
1177
 
892
1178
  # Invenio-Pages
893
1179
  # =============
@@ -898,42 +1184,65 @@ PAGES_DEFAULT_TEMPLATE = "invenio_app_rdm/default_static_page.html"
898
1184
 
899
1185
  PAGES_TEMPLATES = [
900
1186
  ("invenio_app_rdm/default_static_page.html", "Default"),
1187
+ ("invenio_communities/default_static_page.html", "Community"),
901
1188
  ]
902
1189
  """List of available templates for pages."""
903
1190
 
1191
+ APP_RDM_PAGES = {}
1192
+ """Register static pages with predefined initial content from 'pages.yaml' file.
1193
+
1194
+ Example:
1195
+ {
1196
+ "about": "/about",
1197
+ "terms": "/terms",
1198
+ "privacy-policy": "/privacy-policy",
1199
+ }
1200
+ """
1201
+
904
1202
  # Invenio-Stats
905
1203
  # =============
906
1204
  # See https://invenio-stats.readthedocs.io/en/latest/configuration.html
907
1205
 
1206
+
908
1207
  STATS_EVENTS = {
909
1208
  "file-download": {
910
- "templates": "invenio_app_rdm.stats.templates.events.file_download",
1209
+ "templates": "invenio_rdm_records.records.stats.templates.events.file_download",
911
1210
  "event_builders": [
912
- "invenio_app_rdm.stats.file_download_event_builder",
913
- "invenio_app_rdm.stats.check_if_via_api",
1211
+ "invenio_rdm_records.resources.stats.file_download_event_builder",
1212
+ "invenio_rdm_records.resources.stats.check_if_via_api",
914
1213
  ],
915
1214
  "cls": EventsIndexer,
916
1215
  "params": {
917
- "preprocessors": [flag_robots, anonymize_user, build_file_unique_id]
1216
+ "preprocessors": [
1217
+ filter_robots,
1218
+ flag_machines,
1219
+ anonymize_user,
1220
+ build_file_unique_id,
1221
+ ]
918
1222
  },
919
1223
  },
920
1224
  "record-view": {
921
- "templates": "invenio_app_rdm.stats.templates.events.record_view",
1225
+ "templates": "invenio_rdm_records.records.stats.templates.events.record_view",
922
1226
  "event_builders": [
923
- "invenio_app_rdm.stats.record_view_event_builder",
924
- "invenio_app_rdm.stats.check_if_via_api",
925
- "invenio_app_rdm.stats.drop_if_via_api",
1227
+ "invenio_rdm_records.resources.stats.record_view_event_builder",
1228
+ "invenio_rdm_records.resources.stats.check_if_via_api",
1229
+ "invenio_rdm_records.resources.stats.drop_if_via_api",
926
1230
  ],
927
1231
  "cls": EventsIndexer,
928
1232
  "params": {
929
- "preprocessors": [flag_robots, anonymize_user, build_record_unique_id],
1233
+ "preprocessors": [
1234
+ filter_robots,
1235
+ flag_machines,
1236
+ anonymize_user,
1237
+ build_record_unique_id,
1238
+ ],
930
1239
  },
931
1240
  },
932
1241
  }
933
1242
 
934
1243
  STATS_AGGREGATIONS = {
935
1244
  "file-download-agg": {
936
- "templates": "invenio_app_rdm.stats.templates.aggregations.aggr_file_download",
1245
+ "templates": "invenio_rdm_records.records.stats.templates.aggregations.aggr_file_download",
937
1246
  "cls": StatAggregator,
938
1247
  "params": {
939
1248
  "event": "file-download",
@@ -958,7 +1267,7 @@ STATS_AGGREGATIONS = {
958
1267
  },
959
1268
  },
960
1269
  "record-view-agg": {
961
- "templates": "invenio_app_rdm.stats.templates.aggregations.aggr_record_view",
1270
+ "templates": "invenio_rdm_records.records.stats.templates.aggregations.aggr_record_view",
962
1271
  "cls": StatAggregator,
963
1272
  "params": {
964
1273
  "event": "record-view",
@@ -1065,4 +1374,191 @@ STATS_QUERIES = {
1065
1374
  },
1066
1375
  }
1067
1376
 
1068
- STATS_PERMISSION_FACTORY = default_deny_permission_factory
1377
+ STATS_PERMISSION_FACTORY = permissions_policy_lookup_factory
1378
+
1379
+
1380
+ # Invenio-Notifications
1381
+ # =================
1382
+ # See https://github.com/inveniosoftware/invenio-notifications/blob/master/invenio_notifications/config.py # noqa
1383
+
1384
+
1385
+ NOTIFICATIONS_BACKENDS = {
1386
+ EmailNotificationBackend.id: EmailNotificationBackend(),
1387
+ }
1388
+ """Notification backends."""
1389
+
1390
+
1391
+ NOTIFICATIONS_BUILDERS = {
1392
+ # Access request
1393
+ GuestAccessRequestTokenCreateNotificationBuilder.type: GuestAccessRequestTokenCreateNotificationBuilder,
1394
+ GuestAccessRequestAcceptNotificationBuilder.type: GuestAccessRequestAcceptNotificationBuilder,
1395
+ GuestAccessRequestSubmitNotificationBuilder.type: GuestAccessRequestSubmitNotificationBuilder,
1396
+ GuestAccessRequestSubmittedNotificationBuilder.type: GuestAccessRequestSubmittedNotificationBuilder,
1397
+ GuestAccessRequestCancelNotificationBuilder.type: GuestAccessRequestCancelNotificationBuilder,
1398
+ GuestAccessRequestDeclineNotificationBuilder.type: GuestAccessRequestDeclineNotificationBuilder,
1399
+ UserAccessRequestAcceptNotificationBuilder.type: UserAccessRequestAcceptNotificationBuilder,
1400
+ UserAccessRequestSubmitNotificationBuilder.type: UserAccessRequestSubmitNotificationBuilder,
1401
+ UserAccessRequestDeclineNotificationBuilder.type: UserAccessRequestDeclineNotificationBuilder,
1402
+ UserAccessRequestCancelNotificationBuilder.type: UserAccessRequestCancelNotificationBuilder,
1403
+ # Grant user access
1404
+ GrantUserAccessNotificationBuilder.type: GrantUserAccessNotificationBuilder,
1405
+ # Comment request event
1406
+ CommentRequestEventCreateNotificationBuilder.type: CommentRequestEventCreateNotificationBuilder,
1407
+ community_notifications.SubComReqCommentNotificationBuilder.type: community_notifications.SubComReqCommentNotificationBuilder,
1408
+ community_notifications.SubComInvCommentNotificationBuilder.type: community_notifications.SubComInvCommentNotificationBuilder,
1409
+ # Community inclusion
1410
+ CommunityInclusionAcceptNotificationBuilder.type: CommunityInclusionAcceptNotificationBuilder,
1411
+ CommunityInclusionCancelNotificationBuilder.type: CommunityInclusionCancelNotificationBuilder,
1412
+ CommunityInclusionDeclineNotificationBuilder.type: CommunityInclusionDeclineNotificationBuilder,
1413
+ CommunityInclusionExpireNotificationBuilder.type: CommunityInclusionExpireNotificationBuilder,
1414
+ CommunityInclusionSubmittedNotificationBuilder.type: CommunityInclusionSubmittedNotificationBuilder,
1415
+ # Community invitation
1416
+ CommunityInvitationAcceptNotificationBuilder.type: CommunityInvitationAcceptNotificationBuilder,
1417
+ CommunityInvitationCancelNotificationBuilder.type: CommunityInvitationCancelNotificationBuilder,
1418
+ CommunityInvitationDeclineNotificationBuilder.type: CommunityInvitationDeclineNotificationBuilder,
1419
+ CommunityInvitationExpireNotificationBuilder.type: CommunityInvitationExpireNotificationBuilder,
1420
+ CommunityInvitationSubmittedNotificationBuilder.type: CommunityInvitationSubmittedNotificationBuilder,
1421
+ # Subcommunity request
1422
+ community_notifications.SubCommunityCreate.type: community_notifications.SubCommunityCreate,
1423
+ community_notifications.SubCommunityAccept.type: community_notifications.SubCommunityAccept,
1424
+ community_notifications.SubCommunityDecline.type: community_notifications.SubCommunityDecline,
1425
+ # Subcommunity invitation request
1426
+ community_notifications.SubComInvitationCreate.type: community_notifications.SubComInvitationCreate,
1427
+ community_notifications.SubComInvitationAccept.type: community_notifications.SubComInvitationAccept,
1428
+ community_notifications.SubComInvitationDecline.type: community_notifications.SubComInvitationDecline,
1429
+ community_notifications.SubComInvitationExpire.type: community_notifications.SubComInvitationExpire,
1430
+ # Record deletion
1431
+ RecordDeletionAcceptNotificationBuilder.type: RecordDeletionAcceptNotificationBuilder,
1432
+ RecordDeletionDeclineNotificationBuilder.type: RecordDeletionDeclineNotificationBuilder,
1433
+ }
1434
+ """Notification builders."""
1435
+
1436
+
1437
+ NOTIFICATIONS_ENTITY_RESOLVERS = [
1438
+ EmailResolver(),
1439
+ RDMRecordServiceResultResolver(),
1440
+ ServiceResultResolver(service_id="users", type_key="user"),
1441
+ ServiceResultResolver(service_id="communities", type_key="community"),
1442
+ ServiceResultResolver(service_id="requests", type_key="request"),
1443
+ ServiceResultResolver(service_id="request_events", type_key="request_event"),
1444
+ ServiceResultResolver(service_id="groups", type_key="group"),
1445
+ ]
1446
+ """List of entity resolvers used by notification builders."""
1447
+
1448
+ NOTIFICATIONS_SETTINGS_VIEW_FUNCTION = notification_settings
1449
+ """View function for notification settings."""
1450
+
1451
+
1452
+ # Invenio-Users-Resources
1453
+ # =================
1454
+ # See https://github.com/inveniosoftware/invenio-users-resources/blob/master/invenio_users_resources/config.py # noqa
1455
+
1456
+
1457
+ USERS_RESOURCES_SERVICE_SCHEMA = NotificationsUserSchema
1458
+ """Schema used by the users service."""
1459
+
1460
+
1461
+ # Invenio-Requests
1462
+ # =================
1463
+ # See https://github.com/inveniosoftware/invenio-requests/blob/master/invenio_requests/config.py # noqa
1464
+
1465
+
1466
+ REQUESTS_PERMISSION_POLICY = RDMRequestsPermissionPolicy
1467
+ """The requests permission policy, extended to work with guest access requests."""
1468
+
1469
+
1470
+ REQUESTS_ERROR_HANDLERS = {
1471
+ **request_error_handlers,
1472
+ InvalidAccessRestrictions: create_error_handler(
1473
+ lambda e: HTTPJSONException(
1474
+ code=400,
1475
+ description=e.description,
1476
+ )
1477
+ ),
1478
+ }
1479
+
1480
+
1481
+ # Invenio-Github
1482
+ # =================
1483
+ #
1484
+ GITHUB_RELEASE_CLASS = RDMGithubRelease
1485
+ """Default RDM release class."""
1486
+
1487
+
1488
+ # Flask-Menu
1489
+ # ==========
1490
+ #
1491
+ USER_DASHBOARD_MENU_OVERRIDES = {}
1492
+ """Overrides for "dashboard" menu."""
1493
+
1494
+
1495
+ # Invenio-Administration
1496
+ # ======================
1497
+ #
1498
+ from invenio_app_rdm import __version__
1499
+
1500
+ ADMINISTRATION_DISPLAY_VERSIONS = [("invenio-app-rdm", f"v{__version__}")]
1501
+ """Show the InvenioRDM version in the administration panel."""
1502
+
1503
+ ADMINISTRATION_THEME_BASE_TEMPLATE = "invenio_app_rdm/administration_page.html"
1504
+ """Administration base template."""
1505
+
1506
+
1507
+ APP_RDM_SUBCOMMUNITIES_LABEL = "Subcommunities"
1508
+ """Label for the subcommunities in the community browse page."""
1509
+
1510
+ RDM_DETAIL_SIDE_BAR_MANAGE_ATTRIBUTES_EXTENSION_TEMPLATE = None
1511
+ """Side bar manage attributes extension template."""
1512
+
1513
+ # Invenio-Sitemap
1514
+ # ===============
1515
+ # See https://github.com/inveniosoftware/invenio-sitemap/blob/master/invenio_sitemap/config.py # noqa
1516
+ SITEMAP_SECTIONS = [
1517
+ SitemapSectionOfRDMRecords(),
1518
+ SitemapSectionOfCommunities(),
1519
+ ]
1520
+
1521
+
1522
+ # Moderation requests search configuration
1523
+ # ========================================
1524
+ APP_RDM_MODERATION_REQUEST_SEARCH = {
1525
+ "facets": ["status", "is_open"],
1526
+ "sort": ["bestmatch", "newest", "oldest", "newestactivity", "oldestactivity"],
1527
+ }
1528
+ """Moderation requests search configuration."""
1529
+
1530
+ APP_RDM_MODERATION_REQUEST_SORT_OPTIONS = {
1531
+ "bestmatch": dict(
1532
+ title=_("Best match"),
1533
+ fields=["_score"],
1534
+ ),
1535
+ "newest": dict(
1536
+ title=_("Newest"),
1537
+ fields=["-created"],
1538
+ ),
1539
+ "oldest": dict(
1540
+ title=_("Oldest"),
1541
+ fields=["created"],
1542
+ ),
1543
+ "newestactivity": dict(
1544
+ title=_("Newest activity"),
1545
+ fields=["-last_activity_at"],
1546
+ ),
1547
+ "oldestactivity": dict(
1548
+ title=_("Oldest activity"),
1549
+ fields=["last_activity_at"],
1550
+ ),
1551
+ }
1552
+ """Definitions of available record sort options."""
1553
+
1554
+
1555
+ APP_RDM_MODERATION_REQUEST_FACETS = {
1556
+ "status": {
1557
+ "facet": facets.status,
1558
+ "ui": {
1559
+ "field": "status",
1560
+ },
1561
+ },
1562
+ "is_open": {"facet": facets.is_open, "ui": {"field": "is_open"}},
1563
+ }
1564
+ """Available facets defined for this module."""