Skip to content

Commit 315d04e

Browse files
committed
#10263 Relax editing metadata on published/posted materials
1 parent 1bd63d3 commit 315d04e

File tree

6 files changed

+26
-47
lines changed

6 files changed

+26
-47
lines changed

api/v1/submissions/PKPSubmissionController.php

Lines changed: 21 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@
7171
use PKP\submission\reviewAssignment\ReviewAssignment;
7272
use PKP\submissionFile\SubmissionFile;
7373
use PKP\userGroup\UserGroup;
74+
use PKP\observers\events\MetadataChanged;
75+
use PKP\stageAssignment\StageAssignment;
76+
7477

7578
class PKPSubmissionController extends PKPBaseController
7679
{
@@ -1237,16 +1240,12 @@ public function editPublication(Request $illuminateRequest): JsonResponse
12371240
], Response::HTTP_FORBIDDEN);
12381241
}
12391242

1240-
// Publications can not be edited when they are published
1241-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
1242-
return response()->json([
1243-
'error' => __('api.publication.403.cantEditPublished'),
1244-
], Response::HTTP_FORBIDDEN);
1245-
}
1246-
1247-
// Prevent users from editing publications if they do not have permission. Except for admins.
1243+
// only proceed if user is allowed to edit publications
12481244
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
1249-
if (!in_array(Role::ROLE_ID_SITE_ADMIN, $userRoles) && !Repo::submission()->canEditPublication($submission->getId(), $currentUser->getId())) {
1245+
if (
1246+
!in_array(Role::ROLE_ID_SITE_ADMIN, $userRoles) &&
1247+
!Repo::submission()->canEditPublication($submission->getId(), $currentUser->getId())
1248+
) {
12501249
return response()->json([
12511250
'error' => __('api.submissions.403.userCantEdit'),
12521251
], Response::HTTP_FORBIDDEN);
@@ -1276,6 +1275,8 @@ public function editPublication(Request $illuminateRequest): JsonResponse
12761275

12771276
Repo::publication()->edit($publication, $params);
12781277
$publication = Repo::publication()->get($publication->getId());
1278+
event(new MetadataChanged($submission));
1279+
12791280

12801281
$userGroups = UserGroup::withContextIds($submission->getData('contextId'))->cursor();
12811282

@@ -1335,6 +1336,17 @@ public function publishPublication(Request $illuminateRequest): JsonResponse
13351336

13361337
Repo::publication()->publish($publication);
13371338

1339+
$stageAssignments = StageAssignment::withSubmissionIds([$submission->getId()])
1340+
->get();
1341+
1342+
foreach ($stageAssignments as $stageAssignment) {
1343+
$userGroup = $stageAssignment->userGroup;
1344+
if ($userGroup->getRoleId() === Role::ROLE_ID_AUTHOR) {
1345+
$stageAssignment->canChangeMetadata = 0;
1346+
$stageAssignment->save();
1347+
}
1348+
}
1349+
13381350
$publication = Repo::publication()->get($publication->getId());
13391351

13401352
$userGroups = UserGroup::withContextIds($submission->getData('contextId'))->cursor();
@@ -1531,13 +1543,6 @@ public function addContributor(Request $illuminateRequest): JsonResponse
15311543
], Response::HTTP_FORBIDDEN);
15321544
}
15331545

1534-
// Publications can not be edited when they are published
1535-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
1536-
return response()->json([
1537-
'error' => __('api.publication.403.cantEditPublished'),
1538-
], Response::HTTP_FORBIDDEN);
1539-
}
1540-
15411546
$params = $this->convertStringsToSchema(PKPSchemaService::SCHEMA_AUTHOR, $illuminateRequest->input());
15421547
$params['publicationId'] = $publication->getId();
15431548

@@ -1603,12 +1608,6 @@ public function deleteContributor(Request $illuminateRequest): JsonResponse
16031608
], Response::HTTP_NOT_FOUND);
16041609
}
16051610

1606-
// Publications can not be edited when they are published
1607-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
1608-
return response()->json([
1609-
'error' => __('api.publication.403.cantEditPublished'),
1610-
], Response::HTTP_FORBIDDEN);
1611-
}
16121611

16131612
if ($submission->getId() !== $publication->getData('submissionId')) {
16141613
return response()->json([
@@ -1665,13 +1664,6 @@ public function editContributor(Request $illuminateRequest): JsonResponse
16651664
], Response::HTTP_FORBIDDEN);
16661665
}
16671666

1668-
// Publications can not be edited when they are published
1669-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
1670-
return response()->json([
1671-
'error' => __('api.publication.403.cantEditPublished'),
1672-
], Response::HTTP_FORBIDDEN);
1673-
}
1674-
16751667
$params = $this->convertStringsToSchema(PKPSchemaService::SCHEMA_AUTHOR, $illuminateRequest->input());
16761668
$params['id'] = $author->getId();
16771669

@@ -1758,13 +1750,6 @@ public function saveContributorsOrder(Request $illuminateRequest): JsonResponse
17581750
], Response::HTTP_FORBIDDEN);
17591751
}
17601752

1761-
// Publications can not be edited when they are published
1762-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
1763-
return response()->json([
1764-
'error' => __('api.publication.403.cantEditPublished'),
1765-
], Response::HTTP_FORBIDDEN);
1766-
}
1767-
17681753
if (!empty($params['sortedAuthors'])) {
17691754
$authors = [];
17701755
foreach ($params['sortedAuthors'] as $author) {

classes/author/Repository.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,6 @@ public function validate($author, $props, Submission $submission, Context $conte
130130
$publication = Repo::publication()->get($props['publicationId']);
131131
if (!$publication) {
132132
$validator->errors()->add('publicationId', __('author.publicationNotFound'));
133-
} elseif ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
134-
$validator->errors()->add('publicationId', __('author.editPublishedDisabled'));
135133
}
136134
}
137135
});

classes/galley/Repository.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,6 @@ public function validate(?Galley $object, array $props, array $allowedLocales, s
152152
$publication = Repo::publication()->get($props['publicationId']);
153153
if (!$publication) {
154154
$validator->errors()->add('publicationId', __('galley.publicationNotFound'));
155-
} elseif (in_array($publication->getData('status'), [Submission::STATUS_PUBLISHED, Submission::STATUS_SCHEDULED])) {
156-
$validator->errors()->add('publicationId', __('galley.editPublishedDisabled'));
157155
}
158156
}
159157
});

classes/security/authorization/internal/RepresentationUploadAccessPolicy.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ public function dataObjectEffect()
8989
}
9090

9191
// Representations can not be modified on published publications
92-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
93-
$this->setAdvice(AuthorizationPolicy::AUTHORIZATION_ADVICE_DENY_MESSAGE, 'galley.editPublishedDisabled');
94-
return AuthorizationPolicy::AUTHORIZATION_DENY;
95-
}
9692

9793
$this->addAuthorizedContextObject(Application::ASSOC_TYPE_REPRESENTATION, $representation);
9894

classes/task/PublishSubmissions.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use APP\submission\Submission;
2121
use PKP\core\Core;
2222
use PKP\scheduledTask\ScheduledTask;
23+
use PKP\observers\events\MetadataChanged;
24+
2325

2426
class PublishSubmissions extends ScheduledTask
2527
{
@@ -50,6 +52,9 @@ public function executeActions(): bool
5052
$datePublished = $submission->getCurrentPublication()->getData('datePublished');
5153
if ($datePublished && strtotime($datePublished) <= strtotime(Core::getCurrentDate())) {
5254
Repo::publication()->publish($submission->getCurrentPublication());
55+
56+
// dispatch the MetadataChanged event after publishing
57+
event(new MetadataChanged($submission));
5358
}
5459
}
5560
}

controllers/grid/users/author/AuthorGridHandler.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -275,9 +275,6 @@ public function canAdminister($user)
275275
$submission = $this->getSubmission();
276276
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
277277

278-
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
279-
return false;
280-
}
281278

282279
if (in_array(Role::ROLE_ID_SITE_ADMIN, $userRoles)) {
283280
return true;

0 commit comments

Comments
 (0)