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
@@ -1,6 +1,6 @@
1
1
  {#
2
- Copyright (C) 2020 CERN.
3
- Copyright (C) 2020 Northwestern University.
2
+ Copyright (C) 2020-2024 CERN.
3
+ Copyright (C) 2023 Northwestern University.
4
4
  Copyright (C) 2021 Graz University of Technology.
5
5
  Copyright (C) 2021 TU Wien.
6
6
  Copyright (C) New York University.
@@ -9,130 +9,203 @@
9
9
  it under the terms of the MIT License; see LICENSE file for more details.
10
10
  #}
11
11
 
12
- {%- macro preview_file(preview_endpoint, pid_value, filename, is_preview, id='preview-iframe', width='100%', height='400' ) %}
12
+
13
+ {%- macro preview_file(preview_endpoint, pid_value, filename, is_preview, include_deleted, id='preview-iframe' ) %}
14
+ {%- set include_deleted_value = 0 -%}
15
+ {% if include_deleted %}
16
+ {%- set include_deleted_value = 1 -%}
17
+ {% endif %}
13
18
  {% if is_preview %}
14
- {%- set preview_url = url_for(preview_endpoint, pid_value=pid_value, filename=filename, preview=1) -%}
19
+ {%- set preview_url = url_for(preview_endpoint, pid_value=pid_value, filename=filename, preview=1, include_deleted=include_deleted_value) -%}
15
20
  {% else %}
16
- {%- set preview_url = url_for(preview_endpoint, pid_value=pid_value, filename=filename) -%}
21
+ {%- set preview_url = url_for(preview_endpoint, pid_value=pid_value, filename=filename, include_deleted=include_deleted_value) -%}
17
22
  {% endif %}
18
23
  <iframe
19
24
  title="{{_('Preview')}}"
20
25
  class="preview-iframe"
21
26
  id="{{id}}"
22
27
  name="{{id}}"
23
- width="{{width}}"
24
- height="{{height}}"
25
28
  src="{{ preview_url }}"
26
29
  >
27
30
  </iframe>
28
31
  {%- endmacro %}
29
32
 
30
33
 
31
- {% macro preview_file_box(file, pid, is_preview, record) %}
32
- <div class="">
33
- <div class="ui accordion panel mb-10 {{record.ui.access_status.id}}" id="preview" href="#collapsablePreview">
34
- <div class="active title trigger panel-heading {{record.ui.access_status.id}} truncated" tabindex="0" aria-label="{{ _('File preview') }}">
35
- <span id="preview-file-title">{{file.key}}</span>
36
- <i class="ui angle right icon"></i>
37
- </div>
38
- <div id="collapsablePreview" class="active content pt-0">
34
+ {% macro preview_file_box(file, pid, is_preview, record, include_deleted) %}
35
+ {%- set is_remote_file = file.transfer.type == transfer_types.REMOTE %}
36
+ <div class="ui accordion panel mb-10 {{record.ui.access_status.id}}" href="#files-preview-accordion-panel">
37
+ <h3 class="active title panel-heading {{ record.ui.access_status.id }} m-0">
38
+ <div
39
+ role="button"
40
+ id="files-preview-accordion-trigger"
41
+ aria-controls="files-preview-accordion-panel"
42
+ aria-expanded="true"
43
+ tabindex="0"
44
+ class="trigger"
45
+ aria-label="{{ _('File preview') }}"
46
+ >
47
+ <span id="preview-file-title">{{ file.key }}</span>
48
+ <i class="angle right icon" aria-hidden="true"></i>
49
+ </div>
50
+ </h3>
51
+ <div
52
+ role="region"
53
+ id="files-preview-accordion-panel"
54
+ aria-labelledby="files-preview-accordion-trigger"
55
+ class="active content preview-container pt-0 {{record.ui.access_status.id}}"
56
+ >
57
+ {%- if is_remote_file %}
58
+ <div class="ui info message">
59
+ <div class="header">
60
+ {{ _('This file cannot be previewed') }}
61
+ </div>
62
+ <ul class="list">
63
+ <li>{{ _('This file is an external reference and not stored directly in this repository.
64
+ To access its content, please download it and open it locally.') }}
65
+ </li>
66
+ </ul>
67
+ </div>
68
+ {%- else %}
39
69
  <div>
40
- {{ preview_file('invenio_app_rdm_records.record_file_preview', pid_value=pid, filename=file.key, is_preview=is_preview) }}
70
+ {{ preview_file('invenio_app_rdm_records.record_file_preview', pid_value=pid, filename=file.key, is_preview=is_preview, include_deleted=include_deleted) }}
41
71
  </div>
72
+ {%- endif %}
42
73
  </div>
43
74
  </div>
44
- </div>
45
75
  {%- endmacro %}
46
76
 
47
77
 
48
78
  {%- macro file_list(
49
- files, pid, is_preview,
50
- record=None,
51
- with_preview=true,
52
- download_endpoint='invenio_app_rdm_records.record_file_download',
53
- preview_endpoint='invenio_app_rdm_records.record_file_preview'
79
+ files, pid, is_preview, include_deleted,
80
+ record=None,
81
+ with_preview=true,
82
+ download_endpoint='invenio_app_rdm_records.record_file_download',
83
+ preview_endpoint='invenio_app_rdm_records.record_file_preview',
84
+ is_media=false,
85
+ permissions=None
54
86
  ) %}
55
- <table class="ui striped table files fluid">
87
+ <table class="ui striped table files fluid {{record.ui.access_status.id}}">
56
88
  <thead>
57
89
  <tr>
58
90
  <th>{{_('Name')}}</th>
59
91
  <th>{{_('Size')}}</th>
60
92
  <th class>
61
93
  {%- if config.RDM_ARCHIVE_DOWNLOAD_ENABLED %}
62
- {% set archive_download_url = record.links.archive %}
63
- <a role="button" class="ui compact mini button right floated archive-link" href="{{ archive_download_url }}">
64
- <i class="file archive icon button"></i> {{_("Download all")}}
65
- </a>
94
+ {% set archive_download_url = record.links.archive_media if is_media else record.links.archive %}
95
+ <a role="button" class="ui compact mini button right floated archive-link" href="{{ archive_download_url }}">
96
+ <i class="file archive icon button" aria-hidden="true"></i> {{_("Download all")}}
97
+ </a>
66
98
  {%- endif %}
67
99
  </th>
68
100
  </tr>
69
101
  </thead>
70
102
  <tbody>
71
103
  {%- set binary_sizes = not config.APP_RDM_DISPLAY_DECIMAL_FILE_SIZES %}
104
+ {%- set include_deleted_value = 0 -%}
105
+ {% if include_deleted %}
106
+ {%- set include_deleted_value = 1 -%}
107
+ {% endif %}
72
108
  {% for file in files %}
73
- {% if is_preview %}
74
- {%- set file_url_download = url_for(download_endpoint, pid_value=pid, filename=file.key, download=1, preview=1) %}
75
- {%- set file_url_preview = url_for(preview_endpoint, pid_value=pid, filename=file.key, preview=1) %}
76
- {% else %}
77
- {%- set file_url_download = url_for(download_endpoint, pid_value=pid, filename=file.key, download=1) %}
78
- {%- set file_url_preview = url_for(preview_endpoint, pid_value=pid, filename=file.key) %}
109
+ {% if not file.access.hidden %}
110
+ {%- set is_remote_file = file.transfer.type == transfer_types.REMOTE %}
111
+ {% if is_preview %}
112
+ {%- set file_url_download = url_for(download_endpoint, pid_value=pid, filename=file.key, download=1, preview=1) %}
113
+ {%- set file_url_preview = url_for(preview_endpoint, pid_value=pid, filename=file.key, preview=1, include_deleted=include_deleted_value) %}
114
+ {% else %}
115
+ {%- set file_url_download = url_for(download_endpoint, pid_value=pid, filename=file.key, download=1) %}
116
+ {%- set file_url_preview = url_for(preview_endpoint, pid_value=pid, filename=file.key, include_deleted=include_deleted_value) %}
117
+ {% endif %}
118
+
119
+ {%- set file_type = file.key.split('.')[-1] %}
120
+ <tr>
121
+ <td class="ten wide">
122
+ <div>
123
+ <a href="{{ file_url_download }}">{{ file.key }}</a>
124
+ </div>
125
+ {%- if not is_remote_file %}
126
+ <small class="ui text-muted font-tiny">{{ file.checksum or _("Checksum not yet calculated.") }}
127
+ <div class="ui icon inline-block" data-tooltip="{{_('This is the file fingerprint (checksum), which can be used to verify the file integrity.')}}">
128
+ <i class="question circle checksum icon"></i>
129
+ </div>
130
+ </small>
131
+ {%- endif %}
132
+ </td>
133
+ <td>{%- if is_remote_file %}{{_("N/A (external)")}}{%- else -%}{{ file.size|filesizeformat(binary=binary_sizes) }}{%- endif %}</td>
134
+ <td class="right aligned">
135
+ <span>
136
+ {% if with_preview and file_type|lower is previewable and not is_remote_file %}
137
+ <a role="button" class="ui compact mini button preview-link" href="{{ file_url_preview }}" target="preview-iframe" data-file-key="{{file.key}}">
138
+ <i class="eye icon" aria-hidden="true"></i>{{_("Preview")}}
139
+ </a>
140
+ {% endif %}
141
+ <a role="button" class="ui compact mini button" href="{{ file_url_download }}">
142
+ <i class="download icon" aria-hidden="true"></i>{{_('Download')}}
143
+ </a>
144
+ </span>
145
+ </td>
146
+ </tr>
79
147
  {% endif %}
80
- {%- set file_type = file.key.split('.')[-1] %}
81
- <tr>
82
- <td>
83
- <div class="truncated">
84
- <a href="{{ file_url_download }}">{{ file.key }}</a>
85
- </div>
86
- <small class="ui text-muted font-tiny">{{ file.checksum }}
87
- <div class="ui icon inline-block" data-tooltip="{{_('This is the file fingerprint (checksum), which can be used to verify the file integrity.')}}">
88
- <i class="question circle checksum icon"></i>
89
- </div>
90
- </small>
91
- </td>
92
- <td>{{ file.size|filesizeformat(binary=binary_sizes) }}</td>
93
- <td class="right aligned">
94
- <span>
95
- {% if with_preview and file_type|lower is previewable %}
96
- <a role="button" class="ui compact mini button preview-link" href="{{ file_url_preview }}" target="preview-iframe" data-file-key="{{file.key}}">
97
- <i class="eye icon"></i> {{_("Preview")}}
98
- </a>
99
- {% endif %}
100
- <a role="button" class="ui compact mini button" href="{{ file_url_download }}">
101
- <i class="download icon"></i>
102
- {{_('Download')}}
103
- </a>
104
- </span>
105
- </td>
106
- </tr>
107
148
  {% endfor %}
108
149
  </tbody>
109
150
  </table>
110
151
  {%- endmacro %}
111
152
 
112
153
 
113
- {% macro file_list_box(files, pid, is_preview, record) %}
114
- {%- set binary_sizes = not config.APP_RDM_DISPLAY_DECIMAL_FILE_SIZES %}
115
- <div class="">
116
- <div class="ui accordion panel mb-10 {{record.ui.access_status.id}}" id="preview" href="#collapsablePreview">
117
- <div class="active title trigger panel-heading {{record.ui.access_status.id}}" tabindex="0">
118
- {{ _("Files") }}
119
- <small class="text-muted">{% if files %} ({{files|sum(attribute='size')|filesizeformat(binary=binary_sizes)}}){% endif %}</small>
120
- <i class="angle right icon"></i>
121
- </div>
122
- <div class="active content pt-0">
154
+ {% macro file_list_box(files, pid, is_preview, include_deleted, record, permissions) %}
155
+ {%- set binary_sizes = not config.APP_RDM_DISPLAY_DECIMAL_FILE_SIZES %}
156
+ <div class="ui accordion panel mb-10 {{ record.ui.access_status.id }}" href="#files-list-accordion-panel">
157
+ <h3 class="active title panel-heading {{ record.ui.access_status.id }} m-0">
158
+ <div role="button" id="files-list-accordion-trigger" aria-controls="files-list-accordion-panel" aria-expanded="true" tabindex="0" class="trigger">
159
+ {{ _("Files") }}
160
+ <small class="text-muted">{% if files %} ({{files|map(attribute='size', default=0)|sum()|filesizeformat(binary=binary_sizes)}}){% endif %}</small>
161
+ <i class="angle right icon" aria-hidden="true"></i>
162
+ </div>
163
+ </h3>
164
+
165
+ <div role="region" id="files-list-accordion-panel" aria-labelledby="files-list-accordion-trigger" class="active content pt-0">
123
166
  {% if record.access.files == 'restricted' %}
124
- <div class="ui {{ record.ui.access_status.message_class }} message file-box-message">
125
- <i class="ui {{ record.ui.access_status.icon }} icon"></i><b>{{ record.ui.access_status.title_l10n }}</b>
126
- <p>{{ record.ui.access_status.description_l10n }}</p>
127
- {% if record.access.embargo.reason %}
128
- <p>{{_("Reason")}}: {{record.access.embargo.reason}}</p>
129
- {% endif%}
167
+ <div class="ui {{ record.ui.access_status.message_class }} message file-box-message">
168
+ <i class="ui {{ record.ui.access_status.icon }} icon" aria-hidden="true"></i>
169
+ <h4 class="inline">{{ record.ui.access_status.title_l10n }}</h4>
170
+ <p>{{ record.ui.access_status.description_l10n }}</p>
171
+ {% if record.access.embargo.reason %}
172
+ <p>{{_("Reason")}}: {{record.access.embargo.reason}}</p>
173
+ {% endif%}
174
+ </div>
175
+ {% endif %}
176
+ <div>
177
+ {{ file_list(files, pid, is_preview, include_deleted, record=record,download_endpoint="invenio_app_rdm_records.record_file_download", permissions=permissions) }}
178
+ </div>
179
+ </div>
180
+ </div>
181
+ {%- endmacro %}
182
+
183
+ {% macro media_file_list_box(files, pid, is_preview, include_deleted, record, permissions) %}
184
+ {%- set binary_sizes = not config.APP_RDM_DISPLAY_DECIMAL_FILE_SIZES %}
185
+ <div class="ui accordion panel mb-10 {{ record.access.record }}" href="#media-files-preview-accordion-panel">
186
+ <h3 class="active title panel-heading {{ record.access.record }} m-0">
187
+ <div role="button" id="media-files-preview-accordion-trigger" aria-controls="media-files-preview-accordion-panel" aria-expanded="true" tabindex="0" class="trigger">
188
+ {{ _("System files") }}
189
+ <small class="text-muted">{% if files %} ({{files|sum(attribute='size')|filesizeformat(binary=binary_sizes)}}){% endif %}</small>
190
+ <i class="angle right icon" aria-hidden="true"></i>
130
191
  </div>
192
+ </h3>
193
+
194
+ <div role="region" id="media-files-preview-accordion-panel" aria-labelledby="media-files-preview-accordion-trigger" class="active content pt-0">
195
+ {% if record.access.record == 'restricted'%}
196
+ <div class="ui {{ record.ui.access_status.message_class }} message file-box-message">
197
+ <i class="ui {{ record.ui.access_status.icon }} icon"></i>
198
+ <h4 class="inline">{{ record.ui.access_status.title_l10n }}</h4>
199
+
200
+ <p>{{ record.ui.access_status.description_l10n }}</p>
201
+ {% if record.access.embargo.reason %}
202
+ <p>{{_("Reason")}}: {{record.access.embargo.reason}}</p>
203
+ {% endif%}
204
+ </div>
131
205
  {% endif %}
132
- <div id="collapsableFiles">
133
- {{ file_list(files, pid, is_preview, record=record) }}
206
+ <div>
207
+ {{ file_list(files, pid, is_preview, include_deleted, record=record, with_preview=false, download_endpoint="invenio_app_rdm_records.record_media_file_download", is_media=true, permissions=permissions) }}
134
208
  </div>
135
209
  </div>
136
210
  </div>
137
- </div>
138
211
  {%- endmacro %}
@@ -0,0 +1,62 @@
1
+ {#
2
+ Copyright (C) 2023 CERN.
3
+
4
+ Invenio-app-rdm is free software; you can redistribute it and/or modify
5
+ it under the terms of the MIT License; see LICENSE file for more details.
6
+ #}
7
+
8
+ {% macro render_point(coordinates) %}
9
+ {% if coordinates | length == 2 %}
10
+ (<a href="https://google.com/maps/place/{{coordinates[1]}},{{coordinates[0]}}">{{ coordinates[1] }}, {{
11
+ coordinates[0] }} <i class="external alternate icon"></i></a>)
12
+ {% endif %}
13
+ {% endmacro %}
14
+
15
+ {% macro render_feature(feature) %}
16
+ {% set place = feature.get("place") %}
17
+ <div class="rel-mt-1">
18
+ {%- if place %}
19
+ {{ render_feature_with_place(feature) }}
20
+ {%- else %}
21
+ {{ render_feature_without_place(feature) }}
22
+ {%- endif %}
23
+ </div>
24
+ {% endmacro %}
25
+
26
+ <!-- Render points with known "Place" -->
27
+ {% macro render_feature_with_place(feature) %}
28
+ {% set geometry = feature.get("geometry", {}) %}
29
+ {% set place = feature.get("place") %}
30
+ {% set description = feature.get("description") %}
31
+
32
+ <dd>
33
+ {{place}} {%- if geometry %}
34
+ {% set coordinates = geometry.get("coordinates", []) %}
35
+ {{ render_point(coordinates) }}
36
+ {%- endif %}
37
+ <br />
38
+ {% if description %}
39
+ <small>{{description}}</small>
40
+ {%- endif %}
41
+ </dd>
42
+ {%- endmacro %}
43
+
44
+
45
+ <!-- Render points unknown "Place" -->
46
+ {% macro render_feature_without_place(feature) %}
47
+ {% set geometry = feature.get("geometry", {}) %}
48
+ {% set place = feature.get("place") %}
49
+ {% set description = feature.get("description") %}
50
+
51
+ <dd>
52
+ {%- if geometry %}
53
+ {{ render_point(geometry.get("coordinates", [])) }}
54
+ {%- else %}
55
+ {{ _("Unknown") }}
56
+ {%- endif %}
57
+ <br />
58
+ {% if description %}
59
+ <small>{{description}}</small>
60
+ {%- endif %}
61
+ </dd>
62
+ {%- endmacro %}
@@ -1,5 +1,6 @@
1
1
  {#
2
2
  Copyright (C) 2020 CERN.
3
+ Copyright (C) 2024 KTH Royal Institute of Technology.
3
4
 
4
5
  Invenio RDM Records is free software; you can redistribute it and/or modify
5
6
  it under the terms of the MIT License; see LICENSE file for more details.
@@ -9,8 +10,8 @@
9
10
  <div class="ui padded grid">
10
11
  <div class="two column row version-first">
11
12
  <div class="ten wide column left aligned">
12
- <a href="">Version {{ version }}</a>
13
- {% set doi = doi if doi else "No DOI available" %}
13
+ <a href="">{{ _("Version") }} {{ version }}</a>
14
+ {% set doi = doi if doi else _("No DOI available") %}
14
15
  <p class="text-muted font-small">{{ doi }}</p>
15
16
  </div>
16
17
  <div class="six wide column right aligned">
@@ -0,0 +1,33 @@
1
+ {#
2
+ Copyright (C) 2024 CERN.
3
+
4
+ Invenio App RDM is free software; you can redistribute it and/or modify it
5
+ under the terms of the MIT License; see LICENSE file for more details.
6
+ #}
7
+ {% extends config.THEME_ERROR_TEMPLATE %}
8
+
9
+ {%- block message %}
10
+ <div class="container centered rel-pt-2">
11
+ <h1 class="ui header inline-block">
12
+ <i class="icon lightning" aria-hidden="true"></i>
13
+ <div class="content">
14
+ {{_('Permission required')}}
15
+ </div>
16
+ </h1>
17
+ <p>
18
+ {{_('The record was previously accessible to the public but is now restricted to users with access.')}}
19
+ <br/>
20
+ {{_('The Digital Object Identifier (DOI) associated with this record remains active for reference.')}}
21
+ </p>
22
+
23
+ <div class="ui message compact text-align-left">
24
+ <div class="content">
25
+ {%- if record.pids.doi %}
26
+ <p>
27
+ <strong>{{ _("Identifier:") }}</strong> {{ record.pids.doi.identifier }}
28
+ </p>
29
+ {%- endif %}
30
+ </div>
31
+ </div>
32
+ </div>
33
+ {% endblock message %}
@@ -1,5 +1,6 @@
1
1
  {#
2
- Copyright (C) 2021 CERN.
2
+ Copyright (C) 2021-2025 CERN.
3
+ Copyright (C) 2023 TU Wien.
3
4
 
4
5
  Invenio App RDM is free software; you can redistribute it and/or modify it
5
6
  under the terms of the MIT License; see LICENSE file for more details.
@@ -7,18 +8,60 @@
7
8
  {% extends config.THEME_ERROR_TEMPLATE %}
8
9
 
9
10
  {%- set title = _("Tombstone") + " | " + config.THEME_SITENAME -%}
11
+ {%- set removal_reason = _("Reason unknown") %}
12
+ {%- if record.ui.tombstone.removal_reason %}
13
+ {%- set removal_reason = record.ui.tombstone.removal_reason.title_l10n %}
14
+ {%- endif %}
15
+
16
+ {%- block message %}
17
+ <div class="container centered rel-pt-2">
18
+ <h1 class="ui header inline-block">
19
+ <i class="icon lightning" aria-hidden="true"></i>
20
+ <div class="content pl-0 rel-pr-1">
21
+ {{ _('Gone') }}
22
+ </div>
23
+ </h1>
10
24
 
11
- {% block message %}
12
- <h1><i class="fa fa-flash"></i> {{_('Gone')}}</h1>
13
- <p>
14
- {% trans sitename=config.THEME_SITENAME %}
15
- The record you are trying to access was removed from {{sitename}}. The
16
- metadata of the record is kept for archival purposes.
17
- {% endtrans %}
18
- </p>
19
- {% if record and record.removal_reason %}
20
25
  <p>
21
- <strong>{{ _("Reason for removal:") }}</strong> {{record.removal_reason}}
26
+ {%- trans sitename=config.THEME_SITENAME %}
27
+ The record you are trying to access was removed from {{ sitename }}. The
28
+ metadata of the record is kept for archival purposes.
29
+ {%- endtrans %}
22
30
  </p>
23
- {% endif %}
31
+
32
+ <div class="ui message compact text-align-left">
33
+ <div class="content">
34
+ <p>
35
+ <strong>{{ _("Reason for removal:") }}</strong> {{ removal_reason }}
36
+ </p>
37
+ <p>
38
+ <strong>{{ _("Removed by:") }}</strong> {{ record.ui.tombstone.removed_by }}
39
+ </p>
40
+ {%- if record.ui.tombstone.deletion_policy %}
41
+ <p>
42
+ <strong>{{ _("Deletion Policy:") }}</strong> {{ record.ui.tombstone.deletion_policy }}
43
+ </p>
44
+ {%- endif %}
45
+ {%- if record.ui.tombstone.note %}
46
+ <p>
47
+ <strong>{{ _("Removal note:") }}</strong> {{ record.ui.tombstone.note }}
48
+ </p>
49
+ {%- endif %}
50
+ <p>
51
+ <strong>{{ _("Date of removal:") }}</strong> {{ record.ui.tombstone.removal_date_l10n_long }}
52
+ </p>
53
+ {%- if removal_reason != "Spam" %}
54
+ <p>
55
+ <strong>{{ _("Citation:") }}</strong> {{ record.ui.tombstone.citation_text }}
56
+ </p>
57
+ {%- endif %}
58
+ {%- if record.pids.doi %}
59
+ <p>
60
+ <strong>{{ _("Identifier:") }}</strong> {{ record.pids.doi.identifier }}
61
+ </p>
62
+ {%- endif %}
63
+ </div>
64
+
65
+ </div>
66
+ </div>
24
67
  {% endblock message %}
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  #
3
- # Copyright (C) 2020 CERN.
3
+ # Copyright (C) 2020-2025 CERN.
4
4
  # Copyright (C) 2020 Northwestern University.
5
5
  # Copyright (C) 2021 TU Wien.
6
6
  #
@@ -9,9 +9,22 @@
9
9
 
10
10
  """Utility functions."""
11
11
 
12
+ from datetime import datetime, timezone
13
+ from itertools import chain
14
+
15
+ from flask import current_app
16
+ from invenio_access.permissions import system_identity
17
+ from invenio_rdm_records.records.api import RDMRecord
18
+ from invenio_rdm_records.requests.record_deletion import RecordDeletion
19
+ from invenio_rdm_records.services.config import (
20
+ FileModificationPolicyEvaluator,
21
+ RDMRecordDeletionPolicy,
22
+ )
12
23
  from invenio_records.dictutils import dict_set
13
24
  from invenio_records.errors import MissingModelError
14
25
  from invenio_records_files.api import FileObject
26
+ from invenio_requests.proxies import current_requests_service
27
+ from invenio_search.api import dsl
15
28
 
16
29
 
17
30
  def previewer_record_file_factory(pid, record, filename):
@@ -55,3 +68,115 @@ def set_default_value(record_dict, value, path, default_prefix="metadata"):
55
68
  path = "{}.{}".format(default_prefix, path)
56
69
 
57
70
  dict_set(record_dict, path, value)
71
+
72
+
73
+ def get_external_resources(record):
74
+ """Generate external resources from the record."""
75
+ result = []
76
+ resources_cfg = current_app.config["APP_RDM_RECORD_LANDING_PAGE_EXTERNAL_LINKS"]
77
+ for cfg in resources_cfg:
78
+ try:
79
+ res = cfg["render"](record)
80
+ if res:
81
+ result.append(res)
82
+ except Exception:
83
+ pass
84
+ return list(chain.from_iterable(result))
85
+
86
+
87
+ def dump_external_resource(
88
+ url, title, section, icon=None, subtitle=None, template=None
89
+ ):
90
+ """Dumps a external resource dictionary."""
91
+ return {
92
+ "content": {
93
+ "url": url,
94
+ "title": title,
95
+ "subtitle": subtitle,
96
+ "icon": icon,
97
+ "section": section,
98
+ },
99
+ "template": template,
100
+ }
101
+
102
+
103
+ def get_existing_deletion_request(record_id):
104
+ """Return the self HTML link of the existing open deletion request for the record."""
105
+ existing_requests = current_requests_service.search(
106
+ system_identity,
107
+ extra_filter=dsl.Q(
108
+ "bool",
109
+ must=[
110
+ dsl.Q("term", **{"topic.record": record_id}),
111
+ dsl.Q("term", **{"type": RecordDeletion.type_id}),
112
+ dsl.Q("term", **{"is_open": True}),
113
+ ],
114
+ ),
115
+ )
116
+ if existing_requests.total > 0:
117
+ return list(existing_requests)[0]["links"]["self_html"]
118
+
119
+
120
+ def evaluate_record_deletion(record: RDMRecord, identity):
121
+ """Evaluate whether a given record can be deleted by an identity."""
122
+ rec_del = RDMRecordDeletionPolicy().evaluate(identity, record)
123
+
124
+ immediate, request = rec_del["immediate_deletion"], rec_del["request_deletion"]
125
+ rd_enabled = immediate.enabled or request.enabled
126
+ rd_valid_user = immediate.valid_user or request.valid_user
127
+ rd_allowed = immediate.allowed or request.allowed
128
+
129
+ if rd_allowed:
130
+ record_deletion = {
131
+ "enabled": rd_enabled,
132
+ "valid_user": rd_valid_user,
133
+ "allowed": rd_allowed,
134
+ "recordDeletion": rec_del,
135
+ "checklist": (
136
+ current_app.config["RDM_IMMEDIATE_RECORD_DELETION_CHECKLIST"]
137
+ if immediate.allowed
138
+ else current_app.config["RDM_REQUEST_RECORD_DELETION_CHECKLIST"]
139
+ ),
140
+ "context": {
141
+ "files": record.files.count,
142
+ "internalDoi": record.pids.get("doi", {}).get("provider") != "external",
143
+ },
144
+ }
145
+ else:
146
+ record_deletion = {
147
+ "enabled": rd_enabled,
148
+ "valid_user": rd_valid_user,
149
+ "allowed": rd_allowed,
150
+ }
151
+ record_deletion["existing_request"] = (
152
+ # We show existing requests to valid users (even if they are not allowed to delete a record anymore).
153
+ get_existing_deletion_request(record.pid.pid_value)
154
+ if rd_valid_user
155
+ else None
156
+ )
157
+
158
+ return record_deletion
159
+
160
+
161
+ def evaluate_file_modification(record, identity):
162
+ """Evaluate whether a given record file's can be edited by an identity."""
163
+ file_mod = FileModificationPolicyEvaluator().evaluate(identity, record)
164
+
165
+ file_mod = file_mod["immediate_file_modification"]
166
+
167
+ file_modification = {
168
+ "enabled": file_mod.enabled,
169
+ "valid_user": file_mod.valid_user,
170
+ "allowed": file_mod.allowed,
171
+ }
172
+
173
+ if file_mod.allowed:
174
+ file_modification["fileModification"] = file_mod
175
+ created = record.created.replace(tzinfo=timezone.utc)
176
+ modification_until = created + current_app.config.get(
177
+ "RDM_FILE_MODIFICATION_PERIOD"
178
+ )
179
+ days_until = (modification_until - datetime.now(timezone.utc)).days
180
+ file_modification["context"] = {"days_until": days_until}
181
+
182
+ return file_modification