invenio-app-rdm 14.0.0b0.dev3__py2.py3-none-any.whl → 14.0.0b1.dev1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- invenio_app_rdm/__init__.py +1 -1
- invenio_app_rdm/administration/moderation/__init__.py +11 -0
- invenio_app_rdm/administration/moderation/requests.py +175 -0
- invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests.html +14 -0
- invenio_app_rdm/administration/templates/semantic-ui/invenio_app_rdm/administration/requests_details.html +89 -0
- invenio_app_rdm/administration/user_moderation/user_moderation.py +4 -4
- invenio_app_rdm/config.py +47 -0
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/deposit.html +3 -0
- invenio_app_rdm/records_ui/templates/semantic-ui/invenio_app_rdm/records/details/side_bar/manage_menu.html +3 -3
- invenio_app_rdm/records_ui/utils.py +22 -1
- invenio_app_rdm/records_ui/views/deposits.py +62 -3
- invenio_app_rdm/records_ui/views/records.py +43 -1
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/guest-access-request/index.html +5 -5
- invenio_app_rdm/requests_ui/templates/semantic-ui/invenio_requests/record-deletion/index.html +93 -0
- invenio_app_rdm/requests_ui/views/requests.py +17 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchResultItem.js +81 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/RequestsSearchbarLayout.js +48 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/administration/requests/index.js +22 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionModal.js +356 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion/DeletionRadioGroup.js +44 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/components/RecordDeletion.js +81 -0
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/RDMDepositForm.js +22 -2
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/deposit/index.js +2 -1
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/ManageButton.js +72 -20
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordCommunitySubmission/RecordCommunitySubmissionModal.js +1 -1
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js +10 -3
- invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/index.js +1 -0
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.de.html +2 -2
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.en.html +4 -4
- invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/help/search.sv.html +4 -4
- invenio_app_rdm/theme/webpack.py +2 -1
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/METADATA +23 -5
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/RECORD +37 -26
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/entry_points.txt +2 -0
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/WHEEL +0 -0
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/licenses/LICENSE +0 -0
- {invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// This file is part of InvenioRDM
|
|
2
|
+
// Copyright (C) 2025 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
|
+
import React from "react";
|
|
8
|
+
import PropTypes from "prop-types";
|
|
9
|
+
import { Radio, FormField, TableRow, TableCell } from "semantic-ui-react";
|
|
10
|
+
|
|
11
|
+
const DeletionRadioGroup = ({ index, row, state, onStateChange }) => {
|
|
12
|
+
return (
|
|
13
|
+
<TableRow key={row.name}>
|
|
14
|
+
<TableCell>{row.label}</TableCell>
|
|
15
|
+
<TableCell>
|
|
16
|
+
<FormField>
|
|
17
|
+
<Radio
|
|
18
|
+
value="Yes"
|
|
19
|
+
checked={state[index] === true}
|
|
20
|
+
onChange={() => onStateChange(index, true)}
|
|
21
|
+
/>
|
|
22
|
+
</FormField>
|
|
23
|
+
</TableCell>
|
|
24
|
+
<TableCell>
|
|
25
|
+
<FormField>
|
|
26
|
+
<Radio
|
|
27
|
+
value="No"
|
|
28
|
+
checked={state[index] === false}
|
|
29
|
+
onChange={() => onStateChange(index, false)}
|
|
30
|
+
/>
|
|
31
|
+
</FormField>
|
|
32
|
+
</TableCell>
|
|
33
|
+
</TableRow>
|
|
34
|
+
);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
DeletionRadioGroup.propTypes = {
|
|
38
|
+
index: PropTypes.number.isRequired,
|
|
39
|
+
row: PropTypes.object.isRequired,
|
|
40
|
+
state: PropTypes.array.isRequired,
|
|
41
|
+
onStateChange: PropTypes.func.isRequired,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default DeletionRadioGroup;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// This file is part of InvenioRDM
|
|
2
|
+
// Copyright (C) 2025.
|
|
3
|
+
//
|
|
4
|
+
// Invenio RDM Records 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
|
+
import React, { useState } from "react";
|
|
8
|
+
import { Button, Popup } from "semantic-ui-react";
|
|
9
|
+
import { i18next } from "@translations/invenio_app_rdm/i18next";
|
|
10
|
+
import PropTypes from "prop-types";
|
|
11
|
+
import { DeletionModal } from "./RecordDeletion/DeletionModal";
|
|
12
|
+
|
|
13
|
+
export const RecordDeletion = ({
|
|
14
|
+
disabled,
|
|
15
|
+
record,
|
|
16
|
+
permissions,
|
|
17
|
+
recordDeletion,
|
|
18
|
+
options,
|
|
19
|
+
}) => {
|
|
20
|
+
const [modalOpen, setModalOpen] = useState(false);
|
|
21
|
+
const handleOpen = () => setModalOpen(true);
|
|
22
|
+
const handleClose = () => setModalOpen(false);
|
|
23
|
+
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
<Popup
|
|
27
|
+
content={i18next.t("It is not possible to delete this record.")}
|
|
28
|
+
disabled={!disabled}
|
|
29
|
+
trigger={
|
|
30
|
+
<span>
|
|
31
|
+
{recordDeletion.existing_request ? (
|
|
32
|
+
<Button
|
|
33
|
+
fluid
|
|
34
|
+
as="a"
|
|
35
|
+
href={recordDeletion.existing_request}
|
|
36
|
+
disabled={disabled}
|
|
37
|
+
className="basic"
|
|
38
|
+
color="red"
|
|
39
|
+
aria-haspopup="dialog"
|
|
40
|
+
icon="external alternate"
|
|
41
|
+
labelPosition="left"
|
|
42
|
+
content={i18next.t("View deletion request")}
|
|
43
|
+
/>
|
|
44
|
+
) : (
|
|
45
|
+
<Button
|
|
46
|
+
fluid
|
|
47
|
+
onClick={handleOpen}
|
|
48
|
+
disabled={disabled}
|
|
49
|
+
className="negative"
|
|
50
|
+
aria-haspopup="dialog"
|
|
51
|
+
icon="trash outline alternate"
|
|
52
|
+
labelPosition="left"
|
|
53
|
+
content={i18next.t("Delete record")}
|
|
54
|
+
/>
|
|
55
|
+
)}
|
|
56
|
+
</span>
|
|
57
|
+
}
|
|
58
|
+
/>
|
|
59
|
+
<DeletionModal
|
|
60
|
+
record={record}
|
|
61
|
+
open={modalOpen}
|
|
62
|
+
handleClose={handleClose}
|
|
63
|
+
permissions={permissions}
|
|
64
|
+
recordDeletion={recordDeletion}
|
|
65
|
+
options={options}
|
|
66
|
+
/>
|
|
67
|
+
</>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
RecordDeletion.propTypes = {
|
|
72
|
+
disabled: PropTypes.bool,
|
|
73
|
+
record: PropTypes.object.isRequired,
|
|
74
|
+
permissions: PropTypes.object.isRequired,
|
|
75
|
+
recordDeletion: PropTypes.object.isRequired,
|
|
76
|
+
options: PropTypes.array.isRequired,
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
RecordDeletion.defaultProps = {
|
|
80
|
+
disabled: false,
|
|
81
|
+
};
|
|
@@ -47,6 +47,7 @@ import Overridable from "react-overridable";
|
|
|
47
47
|
import { CopyrightsField } from "@js/invenio_rdm_records/src/deposit/fields/CopyrightsField/CopyrightsField";
|
|
48
48
|
import { ShareDraftButton } from "./ShareDraftButton";
|
|
49
49
|
import { depositFormSectionsConfig, severityChecksConfig } from "./config";
|
|
50
|
+
import { RecordDeletion } from "../components/RecordDeletion";
|
|
50
51
|
|
|
51
52
|
export class RDMDepositForm extends Component {
|
|
52
53
|
constructor(props) {
|
|
@@ -112,6 +113,7 @@ export class RDMDepositForm extends Component {
|
|
|
112
113
|
filesLocked,
|
|
113
114
|
recordRestrictionGracePeriod,
|
|
114
115
|
allowRecordRestriction,
|
|
116
|
+
recordDeletion,
|
|
115
117
|
groupsEnabled,
|
|
116
118
|
allowEmptyFiles,
|
|
117
119
|
useUppy,
|
|
@@ -135,6 +137,7 @@ export class RDMDepositForm extends Component {
|
|
|
135
137
|
filesLocked={filesLocked}
|
|
136
138
|
recordRestrictionGracePeriod={recordRestrictionGracePeriod}
|
|
137
139
|
allowRecordRestriction={allowRecordRestriction}
|
|
140
|
+
recordDeletion={recordDeletion}
|
|
138
141
|
groupsEnabled={groupsEnabled}
|
|
139
142
|
allowEmptyFiles={allowEmptyFiles}
|
|
140
143
|
customFieldsUI={customFieldsUI}
|
|
@@ -760,7 +763,23 @@ export class RDMDepositForm extends Component {
|
|
|
760
763
|
>
|
|
761
764
|
<Card>
|
|
762
765
|
<Card.Content>
|
|
763
|
-
<
|
|
766
|
+
<Grid relaxed>
|
|
767
|
+
<Grid.Column width={16}>
|
|
768
|
+
<DeleteButton fluid />
|
|
769
|
+
</Grid.Column>
|
|
770
|
+
|
|
771
|
+
{record.is_published && recordDeletion["enabled"] && (
|
|
772
|
+
<Grid.Column width={16} className="pt-0">
|
|
773
|
+
<RecordDeletion
|
|
774
|
+
record={record}
|
|
775
|
+
permissions={permissions}
|
|
776
|
+
recordDeletion={recordDeletion}
|
|
777
|
+
options={this.vocabularies.metadata.removal_reasons}
|
|
778
|
+
disabled={!recordDeletion["allowed"]}
|
|
779
|
+
/>
|
|
780
|
+
</Grid.Column>
|
|
781
|
+
)}
|
|
782
|
+
</Grid>
|
|
764
783
|
</Card.Content>
|
|
765
784
|
</Card>
|
|
766
785
|
</Overridable>
|
|
@@ -781,6 +800,7 @@ RDMDepositForm.propTypes = {
|
|
|
781
800
|
config: PropTypes.object.isRequired,
|
|
782
801
|
recordRestrictionGracePeriod: PropTypes.number.isRequired,
|
|
783
802
|
allowRecordRestriction: PropTypes.bool.isRequired,
|
|
803
|
+
recordDeletion: PropTypes.object.isRequired,
|
|
784
804
|
record: PropTypes.object.isRequired,
|
|
785
805
|
preselectedCommunity: PropTypes.object,
|
|
786
806
|
files: PropTypes.object,
|
|
@@ -792,8 +812,8 @@ RDMDepositForm.propTypes = {
|
|
|
792
812
|
|
|
793
813
|
RDMDepositForm.defaultProps = {
|
|
794
814
|
preselectedCommunity: undefined,
|
|
795
|
-
permissions: null,
|
|
796
815
|
files: null,
|
|
816
|
+
permissions: null,
|
|
797
817
|
filesLocked: false,
|
|
798
818
|
allowEmptyFiles: true,
|
|
799
819
|
useUppy: false,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is part of InvenioRDM
|
|
2
|
-
// Copyright (C) 2020-
|
|
2
|
+
// Copyright (C) 2020-2025 CERN.
|
|
3
3
|
// Copyright (C) 2020-2022 Northwestern University.
|
|
4
4
|
// Copyright (C) 2022-2024 KTH Royal Institute of Technology.
|
|
5
5
|
//
|
|
@@ -28,6 +28,7 @@ ReactDOM.render(
|
|
|
28
28
|
"deposits-record-restriction-grace-period"
|
|
29
29
|
)}
|
|
30
30
|
allowRecordRestriction={getInputFromDOM("deposits-allow-record-restriction")}
|
|
31
|
+
recordDeletion={getInputFromDOM("deposits-record-deletion")}
|
|
31
32
|
groupsEnabled={getInputFromDOM("config-groups-enabled")}
|
|
32
33
|
allowEmptyFiles={getInputFromDOM("records-resources-allow-empty-files")}
|
|
33
34
|
isDoiRequired={getInputFromDOM("deposits-is-doi-required")}
|
|
@@ -1,17 +1,48 @@
|
|
|
1
1
|
// This file is part of InvenioRDM
|
|
2
|
-
// Copyright (C) 2023-
|
|
2
|
+
// Copyright (C) 2023-2025 CERN.
|
|
3
3
|
//
|
|
4
4
|
// Invenio RDM Records is free software; you can redistribute it and/or modify it
|
|
5
5
|
// under the terms of the MIT License; see LICENSE file for more details.
|
|
6
6
|
|
|
7
|
-
import React from "react";
|
|
7
|
+
import React, { useEffect, useState } from "react";
|
|
8
8
|
import { Dropdown, Modal, Button, Message } from "semantic-ui-react";
|
|
9
9
|
import { i18next } from "@translations/invenio_app_rdm/i18next";
|
|
10
10
|
import PropTypes from "prop-types";
|
|
11
11
|
import { http } from "react-invenio-forms";
|
|
12
12
|
import { APIRoutes } from "../administration/users/api/routes";
|
|
13
|
+
import { RecordDeletion } from "../components/RecordDeletion";
|
|
14
|
+
|
|
15
|
+
const fetchOptions = async () => {
|
|
16
|
+
const url = "/api/vocabularies/removalreasons?q=tags:deletion-request";
|
|
17
|
+
const req = http.get(url);
|
|
18
|
+
try {
|
|
19
|
+
const response = await req;
|
|
20
|
+
const data = response.data.hits.hits;
|
|
21
|
+
|
|
22
|
+
const options = data.map((x) => {
|
|
23
|
+
return {
|
|
24
|
+
text: x["title_l10n"],
|
|
25
|
+
value: x["id"],
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
return options;
|
|
29
|
+
} catch (e) {
|
|
30
|
+
console.error(e);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const ManageButton = ({
|
|
35
|
+
record,
|
|
36
|
+
recordOwnerID,
|
|
37
|
+
permissions,
|
|
38
|
+
recordDeletion,
|
|
39
|
+
}) => {
|
|
40
|
+
const [options, setOptions] = useState([]);
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
fetchOptions().then(setOptions);
|
|
44
|
+
}, []);
|
|
13
45
|
|
|
14
|
-
export const ManageButton = ({ recid, recordOwnerID }) => {
|
|
15
46
|
return (
|
|
16
47
|
<Dropdown
|
|
17
48
|
fluid
|
|
@@ -23,30 +54,51 @@ export const ManageButton = ({ recid, recordOwnerID }) => {
|
|
|
23
54
|
className="icon text-align-center"
|
|
24
55
|
>
|
|
25
56
|
<Dropdown.Menu>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{
|
|
57
|
+
{recordDeletion["valid_user"] && (
|
|
58
|
+
<>
|
|
59
|
+
<Dropdown.Item>
|
|
60
|
+
<RecordDeletion
|
|
61
|
+
record={record}
|
|
62
|
+
permissions={permissions}
|
|
63
|
+
recordDeletion={recordDeletion}
|
|
64
|
+
options={options}
|
|
65
|
+
disabled={!recordDeletion["allowed"]}
|
|
66
|
+
/>
|
|
67
|
+
</Dropdown.Item>
|
|
68
|
+
|
|
69
|
+
{permissions.can_moderate && <Dropdown.Divider />}
|
|
70
|
+
</>
|
|
71
|
+
)}
|
|
72
|
+
{permissions.can_moderate && (
|
|
73
|
+
<>
|
|
74
|
+
<Dropdown.Item
|
|
75
|
+
as="a"
|
|
76
|
+
href={`/administration/records?q=id:${record["id"]}`}
|
|
77
|
+
target="_blank"
|
|
78
|
+
key="manage_record"
|
|
79
|
+
text={i18next.t("Manage record")}
|
|
80
|
+
/>
|
|
81
|
+
<Dropdown.Item
|
|
82
|
+
as="a"
|
|
83
|
+
href={`/administration/users?q=id:${recordOwnerID}`}
|
|
84
|
+
target="_blank"
|
|
85
|
+
key="manage_user"
|
|
86
|
+
text={i18next.t("Manage user")}
|
|
87
|
+
/>
|
|
88
|
+
<Dropdown.Divider />
|
|
89
|
+
{recordOwnerID && <BlockUserItem recordOwnerID={recordOwnerID} />}
|
|
90
|
+
</>
|
|
91
|
+
)}
|
|
42
92
|
</Dropdown.Menu>
|
|
43
93
|
</Dropdown>
|
|
44
94
|
);
|
|
45
95
|
};
|
|
46
96
|
|
|
47
97
|
ManageButton.propTypes = {
|
|
48
|
-
|
|
98
|
+
record: PropTypes.object.isRequired,
|
|
49
99
|
recordOwnerID: PropTypes.string.isRequired,
|
|
100
|
+
permissions: PropTypes.object.isRequired,
|
|
101
|
+
recordDeletion: PropTypes.object.isRequired,
|
|
50
102
|
};
|
|
51
103
|
|
|
52
104
|
const BlockUserItem = ({ recordOwnerID }) => {
|
|
@@ -91,7 +91,7 @@ export class RecordCommunitySubmissionModal extends Component {
|
|
|
91
91
|
} catch (error) {
|
|
92
92
|
console.error(error);
|
|
93
93
|
this.setState({
|
|
94
|
-
error: error
|
|
94
|
+
error: error["message"],
|
|
95
95
|
});
|
|
96
96
|
} finally {
|
|
97
97
|
this.setState({ loading: false });
|
invenio_app_rdm/theme/assets/semantic-ui/js/invenio_app_rdm/landing_page/RecordManagement.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// This file is part of InvenioRDM
|
|
2
|
-
// Copyright (C) 2020-
|
|
2
|
+
// Copyright (C) 2020-2025 CERN.
|
|
3
3
|
// Copyright (C) 2020-2021 Northwestern University.
|
|
4
4
|
// Copyright (C) 2021 Graz University of Technology.
|
|
5
5
|
//
|
|
@@ -34,6 +34,7 @@ export class RecordManagement extends Component {
|
|
|
34
34
|
currentUserId,
|
|
35
35
|
recordOwnerID,
|
|
36
36
|
groupsEnabled,
|
|
37
|
+
recordDeletion,
|
|
37
38
|
} = this.props;
|
|
38
39
|
const { error } = this.state;
|
|
39
40
|
const { id: recid } = record;
|
|
@@ -44,9 +45,14 @@ export class RecordManagement extends Component {
|
|
|
44
45
|
|
|
45
46
|
return (
|
|
46
47
|
<Grid columns={1} className="record-management">
|
|
47
|
-
{permissions.can_moderate && (
|
|
48
|
+
{(recordDeletion["valid_user"] || permissions.can_moderate) && (
|
|
48
49
|
<Grid.Column className="pb-5">
|
|
49
|
-
<ManageButton
|
|
50
|
+
<ManageButton
|
|
51
|
+
record={record}
|
|
52
|
+
recordOwnerID={recordOwnerID}
|
|
53
|
+
permissions={permissions}
|
|
54
|
+
recordDeletion={recordDeletion}
|
|
55
|
+
/>
|
|
50
56
|
</Grid.Column>
|
|
51
57
|
)}
|
|
52
58
|
{permissions.can_edit && !isDraft && (
|
|
@@ -120,4 +126,5 @@ RecordManagement.propTypes = {
|
|
|
120
126
|
isPreviewSubmissionRequest: PropTypes.bool.isRequired,
|
|
121
127
|
currentUserId: PropTypes.string.isRequired,
|
|
122
128
|
recordOwnerID: PropTypes.string.isRequired,
|
|
129
|
+
recordDeletion: PropTypes.object.isRequired,
|
|
123
130
|
};
|
|
@@ -39,6 +39,7 @@ function renderRecordManagement(element) {
|
|
|
39
39
|
currentUserId={recordManagementAppDiv.dataset.currentUserId}
|
|
40
40
|
recordOwnerID={record.parent.access.owned_by.user}
|
|
41
41
|
groupsEnabled={JSON.parse(recordManagementAppDiv.dataset.groupsEnabled)}
|
|
42
|
+
recordDeletion={JSON.parse(recordManagementAppDiv.dataset.recordDeletion)}
|
|
42
43
|
/>
|
|
43
44
|
</OverridableContext.Provider>,
|
|
44
45
|
element
|
|
@@ -156,13 +156,13 @@
|
|
|
156
156
|
<h3>Fehlende Werte</h3>
|
|
157
157
|
<p>
|
|
158
158
|
Es ist möglich, mit den Feldnamen <code>_exists_</code> und
|
|
159
|
-
<code>
|
|
159
|
+
<code>NOT _exists_</code> nach Datensätzen zu suchen,
|
|
160
160
|
in denen entweder ein Wert fehlt oder die einen Wert in einem bestimmten Feld haben.
|
|
161
161
|
</p>
|
|
162
162
|
<p>
|
|
163
163
|
<strong>Beispiel:</strong>
|
|
164
164
|
<a
|
|
165
|
-
href="/search?page=1&size=20&q=
|
|
165
|
+
href="/search?page=1&size=20&q=NOT%20_exists_:metadata.additional_titles"><code>NOT _exists_:metadata.additional_titles</code></a>
|
|
166
166
|
(alle Datensätze ohne metadata.additional_titles)
|
|
167
167
|
</p>
|
|
168
168
|
<p>
|
|
@@ -184,13 +184,13 @@
|
|
|
184
184
|
<p>
|
|
185
185
|
It is possible to search for records that either are missing a value or have
|
|
186
186
|
a value in a specific field using the <code>_exists_</code> and
|
|
187
|
-
<code>
|
|
187
|
+
<code>NOT _exists_</code> field names.
|
|
188
188
|
</p>
|
|
189
189
|
<p>
|
|
190
190
|
<strong>Example:</strong>
|
|
191
|
-
<a href="/search?page=1&size=20&q=
|
|
192
|
-
|
|
193
|
-
>
|
|
191
|
+
<a href="/search?page=1&size=20&q=NOT%20_exists_:metadata.additional_titles">
|
|
192
|
+
<code>NOT _exists_:metadata.additional_titles</code>
|
|
193
|
+
</a>
|
|
194
194
|
(all records without metadata.additional_titles)
|
|
195
195
|
</p>
|
|
196
196
|
<p>
|
|
@@ -176,13 +176,13 @@
|
|
|
176
176
|
<p>
|
|
177
177
|
Det är möjligt att söka efter poster som antingen saknar ett värde eller har
|
|
178
178
|
ett värde i ett specifikt fält med hjälp av <code>_exists_</code> och
|
|
179
|
-
<code>
|
|
179
|
+
<code>NOT _exists_</code> i kombination med fältnamn.
|
|
180
180
|
</p>
|
|
181
181
|
<p>
|
|
182
182
|
<strong>Exempel:</strong>
|
|
183
|
-
<a href="/search?page=1&size=20&q=
|
|
184
|
-
|
|
185
|
-
>
|
|
183
|
+
<a href="/search?page=1&size=20&q=NOT%20_exists_:metadata.additional_titles">
|
|
184
|
+
<code>NOT _exists_:metadata.additional_titles</code>
|
|
185
|
+
</a>
|
|
186
186
|
(alla poster utan metadata.additional_titles)
|
|
187
187
|
</p>
|
|
188
188
|
<p>
|
invenio_app_rdm/theme/webpack.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
#
|
|
3
|
-
# Copyright (C) 2019-
|
|
3
|
+
# Copyright (C) 2019-2025 CERN.
|
|
4
4
|
# Copyright (C) 2019-2022 Northwestern University.
|
|
5
5
|
# Copyright (C) 2022 TU Wien.
|
|
6
6
|
# Copyright (C) 2022 Graz University of Technology.
|
|
@@ -34,6 +34,7 @@ theme = WebpackThemeBundle(
|
|
|
34
34
|
"invenio-app-rdm-frontpage": "./js/invenio_app_rdm/frontpage/index.js",
|
|
35
35
|
"overridable-registry": "./js/invenio_app_rdm/overridableRegistry/index.js",
|
|
36
36
|
"invenio-users-moderation-administration": "./js/invenio_app_rdm/administration/userModeration/index.js",
|
|
37
|
+
"invenio-requests-administration": "./js/invenio_app_rdm/administration/requests/index.js",
|
|
37
38
|
"invenio-users-administration": "./js/invenio_app_rdm/administration/users/index.js",
|
|
38
39
|
"invenio-records-administration": "./js/invenio_app_rdm/administration/records/index.js",
|
|
39
40
|
"invenio-drafts-administration": "./js/invenio_app_rdm/administration/drafts/index.js",
|
{invenio_app_rdm-14.0.0b0.dev3.dist-info → invenio_app_rdm-14.0.0b1.dev1.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invenio-app-rdm
|
|
3
|
-
Version: 14.0.
|
|
3
|
+
Version: 14.0.0b1.dev1
|
|
4
4
|
Summary: Invenio Research Data Management.
|
|
5
5
|
Home-page: https://github.com/inveniosoftware/invenio-app-rdm
|
|
6
6
|
Author: CERN
|
|
@@ -40,9 +40,9 @@ Requires-Dist: invenio-search-ui<5.0.0,>=4.0.0
|
|
|
40
40
|
Requires-Dist: invenio-files-rest<4.0.0,>=3.0.0
|
|
41
41
|
Requires-Dist: invenio-previewer<4.0.0,>=3.0.0
|
|
42
42
|
Requires-Dist: invenio-records-files<2.0.0,>=1.2.1
|
|
43
|
-
Requires-Dist: invenio-collections<
|
|
44
|
-
Requires-Dist: invenio-communities<
|
|
45
|
-
Requires-Dist: invenio-rdm-records<
|
|
43
|
+
Requires-Dist: invenio-collections<3.0.0,>=2.0.0
|
|
44
|
+
Requires-Dist: invenio-communities<22.0.0,>=21.0.0
|
|
45
|
+
Requires-Dist: invenio-rdm-records<22.0.0,>=21.0.0
|
|
46
46
|
Requires-Dist: CairoSVG<3.0.0,>=2.5.2
|
|
47
47
|
Requires-Dist: invenio-banners<6.0.0,>=5.0.0
|
|
48
48
|
Requires-Dist: invenio-pages<8.0.0,>=7.0.0
|
|
@@ -90,7 +90,7 @@ https://inveniordm.docs.cern.ch
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
..
|
|
93
|
-
Copyright (C) 2019-
|
|
93
|
+
Copyright (C) 2019-2025 CERN.
|
|
94
94
|
Copyright (C) 2019-2024 Northwestern University.
|
|
95
95
|
Copyright (C) 2021-2024 TU Wien.
|
|
96
96
|
Copyright (C) 2021-2025 Graz University of Technology.
|
|
@@ -101,6 +101,24 @@ https://inveniordm.docs.cern.ch
|
|
|
101
101
|
Changes
|
|
102
102
|
=======
|
|
103
103
|
|
|
104
|
+
Version v14.0.0b1.dev1 (released 2025-09-24)
|
|
105
|
+
|
|
106
|
+
- Fixed CHANGES.rst formatting
|
|
107
|
+
|
|
108
|
+
Version v14.0.0b1.dev0 (released 2025-09-24)
|
|
109
|
+
|
|
110
|
+
- feat(administration): add Requests view
|
|
111
|
+
- feat: add record deletion requests
|
|
112
|
+
* Allows to configure record deletion policies for immediate deletion
|
|
113
|
+
or going through a request flow on the record landing page.
|
|
114
|
+
|
|
115
|
+
Version v14.0.0b0.dev4 (released 2025-09-01)
|
|
116
|
+
|
|
117
|
+
- views(deposit): pass to the form config the published record if we edit one
|
|
118
|
+
* The published record is used to compare published DOI but it can be
|
|
119
|
+
used also to compare with the published state of an editing draft.
|
|
120
|
+
- help: correct search instructions for missing fields
|
|
121
|
+
|
|
104
122
|
Version v14.0.0b0.dev3 (released 2025-08-26)
|
|
105
123
|
|
|
106
124
|
- fix(community-requests): request permissions were missing from UI
|