invenio-app-rdm 5.0.0.dev0__py2.py3-none-any.whl → 14.0.0b4.dev4__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 (540) hide show
  1. invenio_app_rdm/__init__.py +13 -4
  2. invenio_app_rdm/administration/__init__.py +8 -0
  3. invenio_app_rdm/administration/audit_logs/__init__.py +12 -0
  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 +93 -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/administration/user_moderation/__init__.py +11 -0
  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/administration/views/__init__.py +11 -0
  25. invenio_app_rdm/administration/views/ui.py +21 -0
  26. invenio_app_rdm/cli.py +95 -0
  27. invenio_app_rdm/communities_ui/__init__.py +9 -0
  28. invenio_app_rdm/communities_ui/searchapp.py +27 -0
  29. invenio_app_rdm/communities_ui/sitemap.py +63 -0
  30. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/collection.html +60 -0
  31. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/collections/macros.html +43 -0
  32. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/details/browse/index.html +59 -0
  33. invenio_app_rdm/communities_ui/templates/semantic-ui/invenio_communities/records/index.html +24 -0
  34. invenio_app_rdm/communities_ui/views/__init__.py +13 -0
  35. invenio_app_rdm/communities_ui/views/communities.py +206 -0
  36. invenio_app_rdm/communities_ui/views/ui.py +93 -0
  37. invenio_app_rdm/config.py +1167 -100
  38. invenio_app_rdm/ext.py +157 -0
  39. invenio_app_rdm/fixtures/__init__.py +56 -0
  40. invenio_app_rdm/fixtures/data/oai_sets.yaml +6 -0
  41. invenio_app_rdm/fixtures/oai_sets.py +20 -0
  42. invenio_app_rdm/fixtures/pages/.gitkeep +1 -0
  43. invenio_app_rdm/fixtures/pages.py +76 -0
  44. invenio_app_rdm/records_ui/previewer/__init__.py +9 -0
  45. invenio_app_rdm/records_ui/previewer/iiif_simple.py +51 -0
  46. invenio_app_rdm/records_ui/searchapp.py +70 -0
  47. invenio_app_rdm/records_ui/sitemap.py +44 -0
  48. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +64 -15
  49. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/detail.html +417 -172
  50. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/access-form.html +64 -0
  51. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/citation.html +7 -9
  52. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contact.html +2 -1
  53. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/creatibutors.html +51 -0
  54. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/description.html +13 -2
  55. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/details.html +330 -22
  56. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/doi.html +5 -23
  57. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/meta.html +36 -0
  58. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/citations.html +6 -0
  59. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/communities.html +34 -0
  60. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/details.html +36 -0
  61. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/export.html +34 -0
  62. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/external_resources.html +55 -0
  63. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/keywords_subjects.html +20 -0
  64. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/licenses.html +78 -0
  65. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/locations.html +23 -0
  66. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +42 -0
  67. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/metrics.html +16 -0
  68. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/technical_metadata.html +21 -0
  69. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/versions.html +26 -0
  70. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar.html +4 -45
  71. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/stats.html +112 -90
  72. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/subjects.html +37 -7
  73. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/draft_not_found.html +17 -0
  74. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/export.html +9 -8
  75. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/iiif_preview.html +3 -7
  76. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/creatibutors.html +98 -39
  77. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/detail.html +280 -43
  78. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/doi.html +36 -0
  79. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/files.html +176 -71
  80. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/locations.html +62 -0
  81. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/stats_popup.html +21 -0
  82. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/macros/version.html +3 -2
  83. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/restricted_with_doi_tombstone.html +33 -0
  84. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/search.html +3 -89
  85. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/tombstone.html +55 -12
  86. invenio_app_rdm/records_ui/utils.py +127 -2
  87. invenio_app_rdm/records_ui/views/__init__.py +123 -38
  88. invenio_app_rdm/records_ui/views/decorators.py +414 -120
  89. invenio_app_rdm/records_ui/views/deposits.py +569 -75
  90. invenio_app_rdm/records_ui/views/filters.py +125 -34
  91. invenio_app_rdm/records_ui/views/records.py +425 -76
  92. invenio_app_rdm/redirector/__init__.py +8 -0
  93. invenio_app_rdm/redirector/resource.py +106 -0
  94. invenio_app_rdm/redirector/views.py +18 -0
  95. invenio_app_rdm/requests_ui/__init__.py +9 -0
  96. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-inclusion/index.html +14 -0
  97. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-invitation/community_dashboard.html +38 -0
  98. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-invitation/user_dashboard.html +26 -0
  99. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/community-submission/index.html +129 -0
  100. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/file-modification/index.html +88 -0
  101. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html +66 -0
  102. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/macros/request_header.html +78 -0
  103. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +95 -0
  104. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity/index.html +49 -0
  105. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/subcommunity-invitation/index.html +49 -0
  106. invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/user-access-request/index.html +59 -0
  107. invenio_app_rdm/requests_ui/views/__init__.py +13 -0
  108. invenio_app_rdm/requests_ui/views/requests.py +374 -0
  109. invenio_app_rdm/requests_ui/views/ui.py +72 -0
  110. invenio_app_rdm/tasks.py +45 -0
  111. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/AuditLogActions.js +136 -0
  112. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewJson.js +35 -0
  113. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/ViewRecentChanges.js +119 -0
  114. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/index.js +31 -0
  115. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/SearchResultItemLayout.js +87 -0
  116. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/auditLogs/search/index.js +9 -0
  117. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/CompareRevisionsDropdown.js +89 -0
  118. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUser.js +92 -0
  119. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/ImpersonateUserForm.js +199 -0
  120. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/RevisionsDiffViewer.js +80 -0
  121. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaAction.js +109 -0
  122. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/SetQuotaForm.js +196 -0
  123. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/components/index.js +9 -0
  124. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/index.js +27 -0
  125. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/SearchResultItemLayout.js +185 -0
  126. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/domains/search/index.js +9 -0
  127. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/drafts/index.js +32 -0
  128. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/CompareRevisions.js +129 -0
  129. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordActions.js +75 -0
  130. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RecordResourceActions.js +185 -0
  131. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RemovalReasonsSelect.js +85 -0
  132. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/RestoreConfirmation.js +108 -0
  133. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/TombstoneForm.js +212 -0
  134. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/api.js +38 -0
  135. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/index.js +9 -0
  136. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/api/routes.js +30 -0
  137. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/index.js +40 -0
  138. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/AdministrationSearchLayout.js +56 -0
  139. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/RecordSearchLayout.js +84 -0
  140. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/SearchResultItemLayout.js +171 -0
  141. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/DeletionStatusFilter.js +121 -0
  142. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/filters/index.js +9 -0
  143. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/records/search/index.js +10 -0
  144. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchResultItem.js +79 -0
  145. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchbarLayout.js +48 -0
  146. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/index.js +22 -0
  147. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/ModerationActions.js +103 -0
  148. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/index.js +29 -0
  149. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/SearchResultItemLayout.js +151 -0
  150. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationBulkActions.js +0 -0
  151. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/UserModerationSearchLayout.js +56 -0
  152. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/userModeration/search/index.js +10 -0
  153. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/UserActions.js +263 -0
  154. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/api.js +42 -0
  155. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/index.js +8 -0
  156. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/api/routes.js +38 -0
  157. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/index.js +30 -0
  158. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/SearchResultItemLayout.js +202 -0
  159. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/UserSearchLayout.js +81 -0
  160. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/UserStatusFilterComponent.js +114 -0
  161. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/filters/index.js +1 -0
  162. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/users/search/index.js +10 -0
  163. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/collectionRecordsSearch/index.js +61 -0
  164. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchAppLayout.js +84 -0
  165. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSearchBarElement.js +44 -0
  166. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/CommunityRecordsSingleSearchBarElement.js +46 -0
  167. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/components.js +3 -0
  168. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/communityRecordsSearch/index.js +66 -0
  169. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CompactStats.js +52 -0
  170. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/CopyButton.js +142 -0
  171. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayPartOfCommunities.js +78 -0
  172. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/DisplayVerifiedCommunity.js +54 -0
  173. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/FileModificationUntil.js +45 -0
  174. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js +354 -0
  175. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js +44 -0
  176. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +81 -0
  177. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordsResultsListItem.js +189 -0
  178. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +795 -440
  179. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/ShareDraftButton.js +65 -0
  180. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/config.js +48 -0
  181. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +27 -11
  182. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/RecordsList.js +165 -0
  183. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/frontpage/index.js +23 -0
  184. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/AccessRequestForm.js +254 -0
  185. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagement.js +179 -0
  186. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/CommunitiesManagementDropdown.js +186 -0
  187. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/EditButton.js +36 -15
  188. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ExportDropdown.js +68 -0
  189. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +140 -0
  190. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageDefaultBrandingAction/ManageDefaultBrandingAction.js +129 -0
  191. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesModal.js +63 -0
  192. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunitiesSearch.js +89 -0
  193. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/PendingCommunitiesModal/PendingCommunityRequestItem.js +33 -0
  194. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCitationField.js +162 -0
  195. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesList.js +150 -0
  196. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesListModal.js +90 -0
  197. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearch.js +109 -0
  198. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/RecordCommunitiesSearchItem.js +58 -0
  199. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitiesListModal/index.js +3 -0
  200. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitySubmission/RecordCommunitySubmissionModal.js +171 -0
  201. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +123 -42
  202. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordVersionsList.js +153 -78
  203. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RemoveFromCommunity/RemoveFromCommunityAction.js +188 -0
  204. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/AccessDropdown.js +93 -0
  205. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/CreateAccessLink.js +111 -0
  206. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchItem.js +170 -0
  207. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksSearchResultContainer.js +236 -0
  208. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessLinks/LinksTab.js +106 -0
  209. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessRequests/AccessRequestsTab.js +239 -0
  210. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AccessUsersGroups.js +178 -0
  211. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/AddUserGroupAccessModal.js +172 -0
  212. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/GroupsTab.js +88 -0
  213. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/PeopleTab.js +88 -0
  214. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/AccessUsersGroups/UserGroupAccessSearchResultItem.js +158 -0
  215. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareButton.js +62 -0
  216. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/ShareModal.js +252 -0
  217. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareOptions/api/api.js +39 -0
  218. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/access.js +24 -0
  219. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +102 -28
  220. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/theme.js +131 -0
  221. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/index.js +13 -0
  222. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/overridableRegistry/mapping.js +12 -0
  223. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/AccessRequestExpiration.js +61 -0
  224. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/index.js +1 -0
  225. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineEdit.js +177 -0
  226. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/AccessRequestTimelineRead.js +50 -0
  227. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/requests/timeline/overrides/TimelineFeedHeader.js +34 -0
  228. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/components.js +181 -226
  229. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/search/index.js +50 -16
  230. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/subcommunity/browse.js +28 -0
  231. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/theme.js +164 -0
  232. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/base.js +210 -0
  233. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/communities.js +56 -0
  234. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/requests.js +78 -0
  235. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads.js +210 -0
  236. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/ComputerTabletUploadsItem.js +155 -0
  237. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_dashboard/uploads_items/MobileUploadsItem.js +154 -0
  238. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/utils.js +130 -0
  239. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/file_uploader/uppy.less +37 -0
  240. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/creatibutors.less +54 -0
  241. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page/licenses.less +74 -0
  242. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/previewer/iiif_simple.less +16 -0
  243. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/form.overrides +170 -4
  244. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/form.variables +3 -5
  245. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/grid.overrides +113 -14
  246. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/grid.variables +3 -5
  247. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/menu.overrides +395 -4
  248. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/menu.variables +3 -5
  249. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.overrides +34 -10
  250. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/message.variables +6 -4
  251. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/table.overrides +185 -0
  252. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/collections/table.variables +1 -0
  253. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/button.overrides +112 -4
  254. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/button.variables +5 -4
  255. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/container.overrides +127 -4
  256. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/container.variables +6 -4
  257. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/header.overrides +61 -4
  258. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/header.variables +3 -5
  259. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/icon.overrides +29 -4
  260. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/icon.variables +3 -5
  261. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/image.overrides +115 -0
  262. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/image.variables +4 -0
  263. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/input.overrides +50 -4
  264. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/input.variables +5 -4
  265. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/label.overrides +116 -0
  266. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/label.variables +0 -0
  267. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/list.overrides +73 -27
  268. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/list.variables +3 -5
  269. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.overrides +86 -4
  270. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/elements/segment.variables +3 -5
  271. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.overrides +3 -5
  272. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/reset.variables +3 -5
  273. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.overrides +560 -4
  274. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/globals/site.variables +142 -4
  275. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.overrides +161 -0
  276. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/accordion.variables +9 -0
  277. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/checkbox.overrides +3 -5
  278. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/checkbox.variables +3 -5
  279. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.overrides +116 -12
  280. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/dropdown.variables +10 -0
  281. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.overrides +151 -0
  282. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/modal.variables +5 -0
  283. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.overrides +7 -0
  284. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/search.variables +0 -0
  285. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/tab.overrides +3 -0
  286. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/tab.variables +6 -0
  287. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/transition.overrides +67 -0
  288. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/modules/transition.variables +3 -0
  289. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/theme.less +71 -0
  290. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/card.overrides +168 -0
  291. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/card.variables +2 -0
  292. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/feed.overrides +463 -0
  293. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/feed.variables +1 -0
  294. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.overrides +175 -0
  295. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme/views/item.variables +0 -0
  296. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/i18next.js +37 -0
  297. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/_generatedTranslations.js +66 -0
  298. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/messages.po +951 -0
  299. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ar/translations.json +307 -0
  300. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/messages.po +895 -0
  301. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/bg/translations.json +283 -0
  302. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/messages.po +896 -0
  303. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ca/translations.json +283 -0
  304. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/messages.po +961 -0
  305. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/cs/translations.json +295 -0
  306. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/messages.po +897 -0
  307. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/da/translations.json +283 -0
  308. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/messages.po +966 -0
  309. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/de/translations.json +283 -0
  310. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/messages.po +898 -0
  311. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/el/translations.json +283 -0
  312. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/messages.po +1009 -0
  313. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/en/translations.json +316 -0
  314. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/messages.po +960 -0
  315. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/es/translations.json +283 -0
  316. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/messages.po +896 -0
  317. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/et/translations.json +283 -0
  318. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/messages.po +895 -0
  319. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fa/translations.json +283 -0
  320. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/messages.po +960 -0
  321. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/fr/translations.json +283 -0
  322. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/messages.po +901 -0
  323. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hr/translations.json +289 -0
  324. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/messages.po +952 -0
  325. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/hu/translations.json +283 -0
  326. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/index.js +20 -0
  327. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/messages.po +905 -0
  328. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/it/translations.json +283 -0
  329. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/messages.po +889 -0
  330. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ja/translations.json +277 -0
  331. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/messages.po +895 -0
  332. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ka/translations.json +283 -0
  333. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/messages.po +889 -0
  334. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ko/translations.json +277 -0
  335. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/messages.po +907 -0
  336. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/lt/translations.json +295 -0
  337. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/messages.po +895 -0
  338. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/no/translations.json +283 -0
  339. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/messages.po +910 -0
  340. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pl/translations.json +295 -0
  341. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/messages.po +901 -0
  342. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/pt/translations.json +283 -0
  343. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/messages.po +908 -0
  344. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ro/translations.json +289 -0
  345. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/messages.po +958 -0
  346. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/ru/translations.json +295 -0
  347. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/messages.po +908 -0
  348. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sk/translations.json +295 -0
  349. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/messages.po +951 -0
  350. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/sv/translations.json +283 -0
  351. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/messages.po +952 -0
  352. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/tr/translations.json +283 -0
  353. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/messages.po +910 -0
  354. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/uk/translations.json +295 -0
  355. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/messages.po +891 -0
  356. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_CN/translations.json +277 -0
  357. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/messages.po +889 -0
  358. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/messages/zh_TW/translations.json +277 -0
  359. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/package.json +18 -0
  360. invenio_app_rdm/theme/assets/semantic-ui/translations/invenio_app_rdm/translations.pot +1009 -0
  361. invenio_app_rdm/theme/static/icons/licenses/cc-by-icon.svg +52 -0
  362. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-eu-icon.svg +44 -0
  363. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-icon.svg +67 -0
  364. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-nd-eu-icon.svg +57 -0
  365. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-nd-icon.svg +93 -0
  366. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-sa-eu-icon.svg +55 -0
  367. invenio_app_rdm/theme/static/icons/licenses/cc-by-nc-sa-icon.svg +55 -0
  368. invenio_app_rdm/theme/static/icons/licenses/cc-by-nd-icon.svg +75 -0
  369. invenio_app_rdm/theme/static/icons/licenses/cc-by-sa-icon.svg +72 -0
  370. invenio_app_rdm/theme/static/icons/licenses/cc-cc0-icon.svg +29 -0
  371. invenio_app_rdm/theme/static/icons/licenses/cc-pddc-icon.svg +25 -0
  372. invenio_app_rdm/theme/static/images/gnd-icon.svg +27 -0
  373. invenio_app_rdm/theme/static/images/ror-icon.svg +14 -0
  374. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/administration_page.html +19 -0
  375. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/default_static_page.html +33 -0
  376. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/files_integrity_report/email/files_integrity_report.html +31 -0
  377. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/footer.html +32 -78
  378. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/frontpage.html +41 -176
  379. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header.html +122 -65
  380. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_frontpage.html +18 -14
  381. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header_login.html +130 -38
  382. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html +5 -4
  383. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +13 -8
  384. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.sv.html +254 -0
  385. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.en.html +197 -0
  386. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/statistics.sv.html +196 -0
  387. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.en.html +149 -0
  388. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/versioning.sv.html +143 -0
  389. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/intro_section.html +98 -0
  390. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/javascript.html +12 -0
  391. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/macros/records_list.html +50 -0
  392. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page.html +36 -0
  393. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/page_cover.html +13 -0
  394. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/robots.txt +15 -0
  395. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/searchbar.html +63 -0
  396. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/settings/notifications.html +17 -0
  397. invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/site_footer.html +29 -0
  398. invenio_app_rdm/theme/templates/semantic-ui/invenio_communities/default_static_page.html +26 -0
  399. invenio_app_rdm/theme/templates/semantic-ui/invenio_previewer/latest_record.html +18 -0
  400. invenio_app_rdm/theme/templates/semantic-ui/invenio_previewer/rdm_abstract_previewer.html +30 -0
  401. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/header.html +147 -0
  402. invenio_app_rdm/theme/templates/themes/default/invenio_app_rdm/site_footer.html +42 -0
  403. invenio_app_rdm/theme/views.py +108 -26
  404. invenio_app_rdm/theme/webpack.py +76 -32
  405. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.mo +0 -0
  406. invenio_app_rdm/translations/ar/LC_MESSAGES/messages.po +1389 -0
  407. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.mo +0 -0
  408. invenio_app_rdm/translations/bg/LC_MESSAGES/messages.po +1361 -0
  409. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.mo +0 -0
  410. invenio_app_rdm/translations/ca/LC_MESSAGES/messages.po +1362 -0
  411. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.mo +0 -0
  412. invenio_app_rdm/translations/cs/LC_MESSAGES/messages.po +1398 -0
  413. invenio_app_rdm/translations/da/LC_MESSAGES/messages.mo +0 -0
  414. invenio_app_rdm/translations/da/LC_MESSAGES/messages.po +1363 -0
  415. invenio_app_rdm/translations/de/LC_MESSAGES/messages.mo +0 -0
  416. invenio_app_rdm/translations/de/LC_MESSAGES/messages.po +1410 -0
  417. invenio_app_rdm/translations/el/LC_MESSAGES/messages.mo +0 -0
  418. invenio_app_rdm/translations/el/LC_MESSAGES/messages.po +1364 -0
  419. invenio_app_rdm/translations/es/LC_MESSAGES/messages.mo +0 -0
  420. invenio_app_rdm/translations/es/LC_MESSAGES/messages.po +1389 -0
  421. invenio_app_rdm/translations/et/LC_MESSAGES/messages.mo +0 -0
  422. invenio_app_rdm/translations/et/LC_MESSAGES/messages.po +1364 -0
  423. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.mo +0 -0
  424. invenio_app_rdm/translations/fa/LC_MESSAGES/messages.po +1361 -0
  425. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.mo +0 -0
  426. invenio_app_rdm/translations/fr/LC_MESSAGES/messages.po +1390 -0
  427. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.mo +0 -0
  428. invenio_app_rdm/translations/hr/LC_MESSAGES/messages.po +1361 -0
  429. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.mo +0 -0
  430. invenio_app_rdm/translations/hu/LC_MESSAGES/messages.po +1402 -0
  431. invenio_app_rdm/translations/it/LC_MESSAGES/messages.mo +0 -0
  432. invenio_app_rdm/translations/it/LC_MESSAGES/messages.po +1366 -0
  433. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.mo +0 -0
  434. invenio_app_rdm/translations/ja/LC_MESSAGES/messages.po +1361 -0
  435. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.mo +0 -0
  436. invenio_app_rdm/translations/ka/LC_MESSAGES/messages.po +1361 -0
  437. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.mo +0 -0
  438. invenio_app_rdm/translations/ko/LC_MESSAGES/messages.po +1361 -0
  439. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.mo +0 -0
  440. invenio_app_rdm/translations/lt/LC_MESSAGES/messages.po +1361 -0
  441. invenio_app_rdm/translations/messages.pot +1371 -51
  442. invenio_app_rdm/translations/no/LC_MESSAGES/messages.mo +0 -0
  443. invenio_app_rdm/translations/no/LC_MESSAGES/messages.po +1361 -0
  444. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.mo +0 -0
  445. invenio_app_rdm/translations/pl/LC_MESSAGES/messages.po +1361 -0
  446. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.mo +0 -0
  447. invenio_app_rdm/translations/pt/LC_MESSAGES/messages.po +1361 -0
  448. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.mo +0 -0
  449. invenio_app_rdm/translations/ro/LC_MESSAGES/messages.po +1391 -0
  450. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.mo +0 -0
  451. invenio_app_rdm/translations/ru/LC_MESSAGES/messages.po +1384 -0
  452. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.mo +0 -0
  453. invenio_app_rdm/translations/sk/LC_MESSAGES/messages.po +1362 -0
  454. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.mo +0 -0
  455. invenio_app_rdm/translations/sv/LC_MESSAGES/messages.po +1400 -0
  456. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.mo +0 -0
  457. invenio_app_rdm/translations/tr/LC_MESSAGES/messages.po +1340 -63
  458. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.mo +0 -0
  459. invenio_app_rdm/translations/uk/LC_MESSAGES/messages.po +1363 -0
  460. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
  461. invenio_app_rdm/translations/zh_CN/LC_MESSAGES/messages.po +1363 -0
  462. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.mo +0 -0
  463. invenio_app_rdm/translations/zh_TW/LC_MESSAGES/messages.po +1361 -0
  464. invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_1_0_to_2_0.py +1 -0
  465. invenio_app_rdm/upgrade_scripts/fix_migrated_records_from_8_0_to_9_0.py +90 -0
  466. invenio_app_rdm/upgrade_scripts/migrate_10_0_to_11_0.py +47 -0
  467. invenio_app_rdm/upgrade_scripts/migrate_11_0_to_12_0.py +205 -0
  468. invenio_app_rdm/upgrade_scripts/migrate_12_0_to_13_0.py +235 -0
  469. invenio_app_rdm/upgrade_scripts/migrate_13_0_to_14_0.py +268 -0
  470. invenio_app_rdm/upgrade_scripts/migrate_2_0_to_3_0.py +7 -3
  471. invenio_app_rdm/upgrade_scripts/migrate_3_0_to_4_0.py +26 -10
  472. invenio_app_rdm/upgrade_scripts/migrate_4_0_to_6_0.py +395 -0
  473. invenio_app_rdm/upgrade_scripts/migrate_6_0_to_7_0.py +161 -0
  474. invenio_app_rdm/upgrade_scripts/migrate_7_0_to_8_0.py +153 -0
  475. invenio_app_rdm/upgrade_scripts/migrate_8_0_to_9_0.py +98 -0
  476. invenio_app_rdm/upgrade_scripts/migrate_9_0_to_10_0.py +43 -0
  477. invenio_app_rdm/users/schemas.py +27 -0
  478. invenio_app_rdm/users_ui/__init__.py +9 -0
  479. invenio_app_rdm/users_ui/searchapp.py +53 -0
  480. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/base.html +21 -0
  481. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/communities.html +25 -0
  482. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/header.html +46 -0
  483. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/requests.html +24 -0
  484. invenio_app_rdm/users_ui/templates/semantic-ui/invenio_app_rdm/users/uploads.html +25 -0
  485. invenio_app_rdm/users_ui/views/__init__.py +14 -0
  486. invenio_app_rdm/users_ui/views/dashboard.py +59 -0
  487. invenio_app_rdm/users_ui/views/ui.py +68 -0
  488. invenio_app_rdm/utils/files.py +120 -0
  489. invenio_app_rdm/views.py +21 -0
  490. invenio_app_rdm-14.0.0b4.dev4.dist-info/METADATA +627 -0
  491. invenio_app_rdm-14.0.0b4.dev4.dist-info/RECORD +508 -0
  492. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info}/WHEEL +1 -1
  493. invenio_app_rdm-14.0.0b4.dev4.dist-info/entry_points.txt +44 -0
  494. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/contributors.html +0 -32
  495. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/creators.html +0 -30
  496. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/licenses.html +0 -35
  497. invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/search_deposit.html +0 -103
  498. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareButton.js +0 -43
  499. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ShareModal.js +0 -188
  500. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_records_search/components.js +0 -361
  501. invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/user_records_search/index.js +0 -41
  502. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/deposit.less +0 -126
  503. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/export_page.less +0 -20
  504. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/footer.less +0 -83
  505. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/frontpage.less +0 -95
  506. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/landing_page.less +0 -212
  507. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/navbar.less +0 -216
  508. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/search.less +0 -41
  509. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/theme.less +0 -420
  510. invenio_app_rdm/theme/assets/semantic-ui/less/invenio_app_rdm/variables.less +0 -41
  511. invenio_app_rdm/theme/static/images/logo-bnl.png +0 -0
  512. invenio_app_rdm/theme/static/images/logo-caltechlibrary.png +0 -0
  513. invenio_app_rdm/theme/static/images/logo-cd2h.png +0 -0
  514. invenio_app_rdm/theme/static/images/logo-cern.png +0 -0
  515. invenio_app_rdm/theme/static/images/logo-cottagelabs.png +0 -0
  516. invenio_app_rdm/theme/static/images/logo-data-futures.png +0 -0
  517. invenio_app_rdm/theme/static/images/logo-eko-konnect.png +0 -0
  518. invenio_app_rdm/theme/static/images/logo-geo.svg +0 -1337
  519. invenio_app_rdm/theme/static/images/logo-hzdr.png +0 -0
  520. invenio_app_rdm/theme/static/images/logo-infn.svg +0 -28
  521. invenio_app_rdm/theme/static/images/logo-jrc.svg +0 -1905
  522. invenio_app_rdm/theme/static/images/logo-northwestern-university.png +0 -0
  523. invenio_app_rdm/theme/static/images/logo-openaire.png +0 -0
  524. invenio_app_rdm/theme/static/images/logo-tind.png +0 -0
  525. invenio_app_rdm/theme/static/images/logo-tu-graz.svg +0 -25
  526. invenio_app_rdm/theme/static/images/logo-tu-wien.svg +0 -23
  527. invenio_app_rdm/theme/static/images/logo-tubitak.svg +0 -49
  528. invenio_app_rdm/theme/static/images/logo-uni-hamburg.png +0 -0
  529. invenio_app_rdm/theme/static/images/logo-uni-munster.png +0 -0
  530. invenio_app_rdm/theme/static/images/logo-wacren.png +0 -0
  531. invenio_app_rdm/translations/en/LC_MESSAGES/messages.mo +0 -0
  532. invenio_app_rdm/translations/en/LC_MESSAGES/messages.po +0 -29
  533. invenio_app_rdm/version.py +0 -23
  534. invenio_app_rdm-5.0.0.dev0.dist-info/AUTHORS.rst +0 -11
  535. invenio_app_rdm-5.0.0.dev0.dist-info/METADATA +0 -75
  536. invenio_app_rdm-5.0.0.dev0.dist-info/RECORD +0 -138
  537. invenio_app_rdm-5.0.0.dev0.dist-info/entry_points.txt +0 -13
  538. /invenio_app_rdm/{translations/.gitkeep → fixtures/data/pages.yaml} +0 -0
  539. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info/licenses}/LICENSE +0 -0
  540. {invenio_app_rdm-5.0.0.dev0.dist-info → invenio_app_rdm-14.0.0b4.dev4.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2019-2021 CERN.
4
- # Copyright (C) 2019-2021 Northwestern University.
3
+ # Copyright (C) 2019-2025 CERN.
4
+ # Copyright (C) 2019-2025 Northwestern University.
5
5
  # Copyright (C) 2021 TU Wien.
6
6
  #
7
7
  # Invenio App RDM is free software; you can redistribute it and/or modify it
@@ -11,10 +11,19 @@
11
11
 
12
12
  from functools import wraps
13
13
 
14
- from flask import g, request
15
- from invenio_pidstore.errors import PIDUnregistered
14
+ from flask import current_app, g, make_response, redirect, request, session, url_for
15
+ from flask_login import login_required
16
+ from invenio_base import invenio_url_for
17
+ from invenio_communities.communities.resources.serializer import (
18
+ UICommunityJSONSerializer,
19
+ )
20
+ from invenio_communities.proxies import current_communities
21
+ from invenio_pidstore.errors import PIDDoesNotExistError
16
22
  from invenio_rdm_records.proxies import current_rdm_records
17
- from invenio_rdm_records.resources.config import RDMDraftFilesResourceConfig
23
+ from invenio_rdm_records.resources.serializers.signposting import (
24
+ FAIRSignpostingProfileLvl1Serializer,
25
+ )
26
+ from invenio_rdm_records.services.errors import RecordDeletedException
18
27
  from invenio_records_resources.services.errors import PermissionDeniedError
19
28
  from sqlalchemy.orm.exc import NoResultFound
20
29
 
@@ -29,211 +38,496 @@ def files_service():
29
38
  return current_rdm_records.records_service.files
30
39
 
31
40
 
41
+ def media_files_service():
42
+ """Get the record files service."""
43
+ return current_rdm_records.records_media_files_service.files
44
+
45
+
32
46
  def draft_files_service():
33
47
  """Get the record files service."""
34
48
  return current_rdm_records.records_service.draft_files
35
49
 
36
50
 
51
+ def draft_media_files_service():
52
+ """Get the record files service."""
53
+ return current_rdm_records.records_media_files_service.draft_files
54
+
55
+
37
56
  def pass_record_latest(f):
38
57
  """Decorate a view to pass the latest version of a record."""
58
+
39
59
  @wraps(f)
40
60
  def view(**kwargs):
41
- pid_value = kwargs.get('pid_value')
42
- record_latest = service().read_latest(
43
- id_=pid_value, identity=g.identity
44
- )
45
- kwargs['record'] = record_latest
61
+ pid_value = kwargs.get("pid_value")
62
+ record_latest = service().read_latest(id_=pid_value, identity=g.identity)
63
+ kwargs["record"] = record_latest
46
64
  return f(**kwargs)
65
+
47
66
  return view
48
67
 
49
68
 
50
- def pass_draft(f):
69
+ def pass_draft(expand=False):
51
70
  """Decorator to retrieve the draft using the record service."""
71
+
72
+ def decorator(f):
73
+ @wraps(f)
74
+ def view(**kwargs):
75
+ pid_value = kwargs.get("pid_value")
76
+ try:
77
+ record_service = service()
78
+ draft = record_service.read_draft(
79
+ id_=pid_value,
80
+ identity=g.identity,
81
+ expand=expand,
82
+ )
83
+ kwargs["draft"] = draft
84
+ kwargs["files_locked"] = draft._record.files.bucket.locked
85
+ return f(**kwargs)
86
+ except PIDDoesNotExistError:
87
+ # Redirect to /records/:id because users are interchangeably
88
+ # using /records/:id and /uploads/:id when sharing links, so in
89
+ # case a draft doesn't exists, when check if the record exists
90
+ # always.
91
+ return redirect(
92
+ url_for(
93
+ "invenio_app_rdm_records.record_detail",
94
+ pid_value=pid_value,
95
+ )
96
+ )
97
+
98
+ return view
99
+
100
+ return decorator
101
+
102
+
103
+ def pass_is_preview(f):
104
+ """Decorate a view to check if it's a preview."""
105
+
52
106
  @wraps(f)
53
107
  def view(**kwargs):
54
- pid_value = kwargs.get('pid_value')
55
- draft = service().read_draft(
56
- id_=pid_value,
57
- identity=g.identity
58
- )
59
- kwargs['draft'] = draft
108
+ kwargs["is_preview"] = request.args.get("preview") == "1"
60
109
  return f(**kwargs)
110
+
61
111
  return view
62
112
 
63
113
 
64
- def pass_is_preview(f):
65
- """Decorate a view to check if it's a preview."""
114
+ def pass_is_iframe(f):
115
+ """Decorate a view to check if it's being requested from inside an iframe."""
116
+
66
117
  @wraps(f)
67
118
  def view(**kwargs):
68
- preview = request.args.get('preview')
69
- is_preview = False
70
- if preview == '1':
71
- is_preview = True
72
- kwargs['is_preview'] = is_preview
119
+ # See https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Sec-Fetch-Dest
120
+ header_value = request.headers.get("Sec-Fetch-Dest")
121
+ kwargs["is_iframe"] = header_value == "iframe"
73
122
  return f(**kwargs)
123
+
74
124
  return view
75
125
 
76
126
 
77
- def pass_record_from_pid(f):
78
- """Decorate a view to pass the latest version of a record."""
127
+ def pass_preview_file(f):
128
+ """Decorate a view to pass the preview file."""
129
+
79
130
  @wraps(f)
80
- def view(*args, **kwargs):
81
- pid_type = kwargs.get('pid_scheme')
82
- pid_value = kwargs.get('pid_value')
131
+ def view(**kwargs):
132
+ kwargs["preview_file"] = request.args.get("preview_file")
133
+ return f(**kwargs)
83
134
 
84
- record = service().resolve_pid(
85
- id_=pid_value,
86
- pid_type=pid_type,
87
- identity=g.identity
88
- )
135
+ return view
136
+
137
+
138
+ # TODO to be improved as a request arg schema (following the REST views)
139
+ def pass_include_deleted(f):
140
+ """Decorate a view to check if it's a include deleted."""
89
141
 
90
- kwargs['record'] = record
142
+ @wraps(f)
143
+ def view(**kwargs):
144
+ deleted_arg = request.args.get("include_deleted")
145
+ include_deleted = False
146
+ if deleted_arg == "1":
147
+ include_deleted = True
148
+ kwargs["include_deleted"] = include_deleted
91
149
  return f(**kwargs)
150
+
92
151
  return view
93
152
 
94
153
 
95
- def pass_record_or_draft(f):
96
- """Decorate to retrieve the record or draft using the record service."""
154
+ def pass_record_from_pid(f):
155
+ """Decorate a view to pass the record from a pid."""
156
+
97
157
  @wraps(f)
98
- def view(**kwargs):
99
- pid_value = kwargs.get('pid_value')
100
- is_preview = kwargs.get('is_preview')
158
+ def view(*args, **kwargs):
159
+ scheme = kwargs.get("pid_scheme")
160
+ pid_value = kwargs.get("pid_value")
101
161
 
102
- def get_record():
103
- """Retrieve record."""
104
- return service().read(id_=pid_value, identity=g.identity)
162
+ record = service().pids.resolve(
163
+ g.identity,
164
+ pid_value,
165
+ scheme,
166
+ )
105
167
 
106
- if is_preview:
107
- try:
108
- record = service().read_draft(
109
- id_=pid_value,
110
- identity=g.identity
111
- )
112
- except NoResultFound:
113
- record = get_record()
114
- else:
115
- record = get_record()
116
- kwargs['record'] = record
168
+ kwargs["record"] = record
117
169
  return f(**kwargs)
170
+
118
171
  return view
119
172
 
120
173
 
121
- def pass_file_item(f):
122
- """Decorate a view to pass a file item using the files service."""
123
- @wraps(f)
124
- def view(**kwargs):
125
- pid_value = kwargs.get('pid_value')
126
- file_key = kwargs.get('filename')
127
- is_preview = kwargs.get('is_preview')
174
+ def pass_record_or_draft(expand=False):
175
+ """Decorate to retrieve the record or draft using the record service."""
128
176
 
129
- def get_record_file_content():
130
- """Retrieve record file content."""
131
- return files_service().get_file_content(
132
- id_=pid_value,
133
- file_key=file_key,
134
- identity=g.identity
177
+ def decorator(f):
178
+ @wraps(f)
179
+ def view(**kwargs):
180
+ pid_value = kwargs.get("pid_value")
181
+ is_preview = kwargs.get("is_preview")
182
+ preview_file = kwargs.get("preview_file")
183
+ include_deleted = kwargs.get("include_deleted", False)
184
+ read_kwargs = {
185
+ "id_": pid_value,
186
+ "identity": g.identity,
187
+ "expand": expand,
188
+ }
189
+
190
+ if is_preview:
191
+ # read_draft internally handles NoResultFound and renders an error page
192
+ record = service().read_draft(**read_kwargs)
193
+ else:
194
+ try:
195
+ record = service().read(
196
+ include_deleted=include_deleted, **read_kwargs
197
+ )
198
+ except NoResultFound:
199
+ # If the parent pid is being used we can get the id of the latest record and redirect
200
+ latest_version = service().read_latest(**read_kwargs)
201
+ return redirect(
202
+ url_for(
203
+ "invenio_app_rdm_records.record_detail",
204
+ pid_value=latest_version.id,
205
+ preview_file=preview_file,
206
+ )
207
+ )
208
+ kwargs["record"] = record
209
+ return f(**kwargs)
210
+
211
+ return view
212
+
213
+ return decorator
214
+
215
+
216
+ def pass_file_item(is_media=False):
217
+ """Decorator to pass a file or media file item using the corresponding service."""
218
+
219
+ def decorator(f):
220
+ @wraps(f)
221
+ def view(**kwargs):
222
+ pid_value = kwargs.get("pid_value")
223
+ file_key = kwargs.get("filename")
224
+ is_preview = kwargs.get("is_preview")
225
+ read_kwargs = {
226
+ "id_": pid_value,
227
+ "file_key": file_key,
228
+ "identity": g.identity,
229
+ }
230
+ draft_service = (
231
+ draft_media_files_service if is_media else draft_files_service
135
232
  )
233
+ record_service = media_files_service if is_media else files_service
136
234
 
137
- if is_preview:
138
235
  try:
139
- item = draft_files_service().get_file_content(
140
- id_=pid_value,
141
- file_key=file_key,
142
- identity=g.identity
236
+ if is_preview:
237
+ try:
238
+ item = draft_service().get_file_content(**read_kwargs)
239
+ except NoResultFound:
240
+ item = record_service().get_file_content(**read_kwargs)
241
+ else:
242
+ item = record_service().get_file_content(**read_kwargs)
243
+
244
+ kwargs["file_item"] = item
245
+ return f(**kwargs)
246
+
247
+ except RecordDeletedException:
248
+ # Redirect to the record page which has proper tombstone handling
249
+ return redirect(
250
+ url_for(
251
+ "invenio_app_rdm_records.record_detail",
252
+ pid_value=pid_value,
253
+ ),
254
+ # Use 302 (temporary) instead of 301 since records can be restored
255
+ code=302,
143
256
  )
144
- except NoResultFound:
145
- item = get_record_file_content()
146
- else:
147
- item = get_record_file_content()
148
- kwargs['file_item'] = item
149
- return f(**kwargs)
150
- return view
257
+
258
+ return view
259
+
260
+ return decorator
151
261
 
152
262
 
153
263
  def pass_file_metadata(f):
154
264
  """Decorate a view to pass a file's metadata using the files service."""
265
+
155
266
  @wraps(f)
156
267
  def view(**kwargs):
157
- pid_value = kwargs.get('pid_value')
158
- file_key = kwargs.get('filename')
159
- is_preview = kwargs.get('is_preview')
160
-
161
- def get_record_file_content():
162
- """Retrieve record file metadata."""
163
- return files_service().read_file_metadata(
164
- id_=pid_value,
165
- file_key=file_key,
166
- identity=g.identity
167
- )
268
+ pid_value = kwargs.get("pid_value")
269
+ file_key = kwargs.get("filename")
270
+ is_preview = kwargs.get("is_preview")
271
+ read_kwargs = {"id_": pid_value, "file_key": file_key, "identity": g.identity}
168
272
 
169
273
  if is_preview:
170
274
  try:
171
- files = draft_files_service().read_file_metadata(
172
- id_=pid_value,
173
- file_key=file_key,
174
- identity=g.identity
175
- )
275
+ files = draft_files_service().read_file_metadata(**read_kwargs)
176
276
  except NoResultFound:
177
- files = get_record_file_content()
277
+ files = files_service().read_file_metadata(**read_kwargs)
178
278
  else:
179
- files = get_record_file_content()
180
- kwargs['file_metadata'] = files
279
+ files = files_service().read_file_metadata(**read_kwargs)
280
+
281
+ kwargs["file_metadata"] = files
181
282
  return f(**kwargs)
283
+
182
284
  return view
183
285
 
184
286
 
185
287
  def pass_record_files(f):
186
288
  """Decorate a view to pass a record's files using the files service."""
289
+
187
290
  @wraps(f)
188
291
  def view(**kwargs):
189
- is_preview = kwargs.get('is_preview')
292
+ is_preview = kwargs.get("is_preview")
293
+ pid_value = kwargs.get("pid_value")
294
+ read_kwargs = {"id_": pid_value, "identity": g.identity}
190
295
 
191
- def list_record_files():
192
- """List record files."""
193
- return files_service().list_files(
194
- id_=pid_value, identity=g.identity
195
- )
196
- return service().read(id_=pid_value, identity=g.identity)
296
+ try:
297
+ if is_preview:
298
+ try:
299
+ files = draft_files_service().list_files(**read_kwargs)
300
+ except NoResultFound:
301
+ files = files_service().list_files(**read_kwargs)
302
+ else:
303
+ files = files_service().list_files(**read_kwargs)
304
+
305
+ kwargs["files"] = files
306
+
307
+ except PermissionDeniedError:
308
+ # this is handled here because we don't want a 404 on the landing
309
+ # page when a user is allowed to read the metadata but not the
310
+ # files
311
+ kwargs["files"] = None
312
+
313
+ return f(**kwargs)
314
+
315
+ return view
316
+
317
+
318
+ def pass_record_media_files(f):
319
+ """Decorate a view to pass a record's media files using the files service."""
320
+
321
+ @wraps(f)
322
+ def view(**kwargs):
323
+ is_preview = kwargs.get("is_preview")
324
+ pid_value = kwargs.get("pid_value")
325
+ read_kwargs = {"id_": pid_value, "identity": g.identity}
197
326
 
198
327
  try:
199
- pid_value = kwargs.get('pid_value')
200
328
  if is_preview:
201
329
  try:
202
- files = draft_files_service().list_files(
203
- id_=pid_value, identity=g.identity
204
- )
330
+ media_files = draft_media_files_service().list_files(**read_kwargs)
205
331
  except NoResultFound:
206
- files = list_record_files()
332
+ media_files = media_files_service().list_files(**read_kwargs)
207
333
  else:
208
- files = list_record_files()
209
- kwargs['files'] = files
334
+ media_files = media_files_service().list_files(**read_kwargs)
335
+
336
+ kwargs["media_files"] = media_files
210
337
 
211
338
  except PermissionDeniedError:
212
339
  # this is handled here because we don't want a 404 on the landing
213
340
  # page when a user is allowed to read the metadata but not the
214
341
  # files
215
- kwargs['files'] = None
342
+ kwargs["media_files"] = None
216
343
 
217
344
  return f(**kwargs)
345
+
218
346
  return view
219
347
 
220
348
 
221
349
  def pass_draft_files(f):
222
350
  """Decorate a view to pass a draft's files using the files service."""
351
+
223
352
  @wraps(f)
224
353
  def view(**kwargs):
225
354
  try:
226
- pid_value = kwargs.get('pid_value')
227
- files = draft_files_service().list_files(
228
- id_=pid_value, identity=g.identity
229
- )
230
- kwargs['draft_files'] = files
231
-
355
+ pid_value = kwargs.get("pid_value")
356
+ files = draft_files_service().list_files(id_=pid_value, identity=g.identity)
357
+ kwargs["draft_files"] = files
232
358
  except PermissionDeniedError:
233
359
  # this is handled here because we don't want a 404 on the landing
234
360
  # page when a user is allowed to read the metadata but not the
235
361
  # files
236
- kwargs['draft_files'] = None
362
+ kwargs["draft_files"] = None
363
+
364
+ return f(**kwargs)
365
+
366
+ return view
367
+
368
+
369
+ def pass_draft_community(f):
370
+ """Decorate to retrieve the community record using the community service.
371
+
372
+ Pass the community record or None when creating a new draft and having
373
+ selected a community via the url.
374
+ """
375
+
376
+ @wraps(f)
377
+ def view(**kwargs):
378
+ comid = request.args.get("community")
379
+ if comid:
380
+ community = current_communities.service.read(id_=comid, identity=g.identity)
381
+ kwargs["community"] = community
382
+ kwargs["community_ui"] = UICommunityJSONSerializer().dump_obj(
383
+ community.to_dict()
384
+ )
237
385
 
238
386
  return f(**kwargs)
387
+
388
+ return view
389
+
390
+
391
+ def _get_header(rel, value, link_type=None):
392
+ header = f'<{value}> ; rel="{rel}"'
393
+ if link_type:
394
+ header += f' ; type="{link_type}"'
395
+ return header
396
+
397
+
398
+ def _get_signposting_collection(pid_value):
399
+ ui_url = invenio_url_for(
400
+ "invenio_app_rdm_records.record_detail", pid_value=pid_value
401
+ )
402
+ return _get_header("collection", ui_url, "text/html")
403
+
404
+
405
+ def _get_signposting_describes(pid_value):
406
+ ui_url = invenio_url_for(
407
+ "invenio_app_rdm_records.record_detail", pid_value=pid_value
408
+ )
409
+ return _get_header("describes", ui_url, "text/html")
410
+
411
+
412
+ def _get_signposting_linkset(pid_value):
413
+ api_url = invenio_url_for("records.read", pid_value=pid_value)
414
+ return _get_header("linkset", api_url, "application/linkset+json")
415
+
416
+
417
+ def add_signposting_landing_page(f):
418
+ """Add signposting links to the landing page view's response headers."""
419
+
420
+ @wraps(f)
421
+ def view(*args, **kwargs):
422
+ response = make_response(f(*args, **kwargs))
423
+
424
+ # Relies on other decorators having operated before it
425
+ if current_app.config[
426
+ "APP_RDM_RECORD_LANDING_PAGE_FAIR_SIGNPOSTING_LEVEL_1_ENABLED"
427
+ ]:
428
+ record = kwargs["record"]
429
+
430
+ signposting_headers = (
431
+ FAIRSignpostingProfileLvl1Serializer().serialize_object(
432
+ record.to_dict()
433
+ )
434
+ )
435
+
436
+ response.headers["Link"] = signposting_headers
437
+ else:
438
+ pid_value = kwargs["pid_value"]
439
+ signposting_link = invenio_url_for("records.read", pid_value=pid_value)
440
+
441
+ response.headers["Link"] = (
442
+ f'<{signposting_link}> ; rel="linkset" ; type="application/linkset+json"' # fmt: skip
443
+ )
444
+
445
+ return response
446
+
447
+ return view
448
+
449
+
450
+ def add_signposting_content_resources(f):
451
+ """Add signposting links to the content resources view's response headers."""
452
+
453
+ @wraps(f)
454
+ def view(*args, **kwargs):
455
+ response = make_response(f(*args, **kwargs))
456
+
457
+ # Relies on other decorators having operated before it
458
+ pid_value = kwargs["pid_value"]
459
+
460
+ signposting_headers = [
461
+ _get_signposting_collection(pid_value),
462
+ _get_signposting_linkset(pid_value),
463
+ ]
464
+
465
+ response.headers["Link"] = " , ".join(signposting_headers)
466
+
467
+ return response
468
+
469
+ return view
470
+
471
+
472
+ def add_signposting_metadata_resources(f):
473
+ """Add signposting links to the metadata resources view's response headers."""
474
+
475
+ @wraps(f)
476
+ def view(*args, **kwargs):
477
+ response = make_response(f(*args, **kwargs))
478
+
479
+ # Relies on other decorators having operated before it
480
+ pid_value = kwargs["pid_value"]
481
+
482
+ signposting_headers = [
483
+ _get_signposting_describes(pid_value),
484
+ _get_signposting_linkset(pid_value),
485
+ ]
486
+
487
+ response.headers["Link"] = " , ".join(signposting_headers)
488
+
489
+ return response
490
+
491
+ return view
492
+
493
+
494
+ def secret_link_or_login_required():
495
+ """Skip login redirection check for requests with secret links.
496
+
497
+ If access has been granted via a secret link, then permissions are checked
498
+ in the dedicated view.
499
+ """
500
+
501
+ def decorator(f):
502
+ @wraps(f)
503
+ def view(**kwargs):
504
+ secret_link_token_arg = "token"
505
+ session_token = session.get(secret_link_token_arg, None)
506
+ if session_token is None:
507
+ login_required(f)
508
+ return f(**kwargs)
509
+
510
+ return view
511
+
512
+ return decorator
513
+
514
+
515
+ def no_cache_response(f):
516
+ """Add appropriate response headers to force no caching.
517
+
518
+ This decorator is used to prevent caching of the response in the browser. This is needed
519
+ in the deposit form as we initialize the form with the record metadata included in the html page
520
+ and we don't want the browser to cache this page so that the user always gets the latest version of the record.
521
+ """
522
+
523
+ @wraps(f)
524
+ def view(*args, **kwargs):
525
+ response = make_response(f(*args, **kwargs))
526
+
527
+ response.cache_control.no_cache = True
528
+ response.cache_control.no_store = True
529
+ response.cache_control.must_revalidate = True
530
+
531
+ return response
532
+
239
533
  return view