Skip to content

pkp/pkp-lib#10263 Relax editing metadata on published/posted materials #1943

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
May 1, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 22 additions & 19 deletions controllers/grid/catalogEntry/PublicationFormatGridHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
use PKP\security\authorization\internal\RepresentationRequiredPolicy;
use PKP\security\authorization\PublicationAccessPolicy;
use PKP\security\Role;
use PKP\submission\PKPSubmission;
use PKP\submissionFile\SubmissionFile;

class PublicationFormatGridHandler extends CategoryGridHandler
Expand Down Expand Up @@ -157,25 +156,29 @@ public function initialize($request, $args = null)

$this->setTitle('monograph.publicationFormats');

if ($this->getPublication()->getData('status') !== PKPSubmission::STATUS_PUBLISHED) {
// Grid actions
$router = $request->getRouter();
$actionArgs = $this->getRequestArgs();
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
$this->_canManage = 0 != count(array_intersect($userRoles, [Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT]));
if ($this->_canManage) {
$this->addAction(
new LinkAction(
'addFormat',
new AjaxModal(
$router->url($request, null, null, 'addFormat', null, $actionArgs),
__('grid.action.addFormat'),
),

// Let managers or sub editors always have `_canManage`
$router = $request->getRouter();
$actionArgs = $this->getRequestArgs();
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
$this->_canManage = (bool) array_intersect(
$userRoles,
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT]
);

// if `_canManage` is true, add the "Add Format" button
if ($this->_canManage) {
$this->addAction(
new LinkAction(
'addFormat',
new AjaxModal(
$router->url($request, null, null, 'addFormat', null, $actionArgs),
__('grid.action.addFormat'),
'add_item'
)
);
}
),
__('grid.action.addFormat'),
'add_item'
)
);
}

// Columns
Expand Down
26 changes: 21 additions & 5 deletions controllers/grid/users/chapter/ChapterGridHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,14 @@ public function initialize($request, $args = null)
$this->setTitle('submission.chapters');

if ($this->getPublication()->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
$this->setReadOnly(true);
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
if (!array_intersect(
[Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT],
$userRoles
)) {
// set readOnly to true for everyone else
$this->setReadOnly(true);
}
}

if (!$this->getReadOnly()) {
Expand Down Expand Up @@ -232,14 +239,23 @@ public function canAdminister($user)
$publication = $this->getPublication();
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);

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

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

// if it is published, allow managers or sub-editors
if ($publication->getData('status') === PKPSubmission::STATUS_PUBLISHED) {
// allow these roles to edit galleys even if published
if (array_intersect(
[Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR, Role::ROLE_ID_ASSISTANT],
$userRoles
)) {
return true;
}
// otherwise block
return false;
}

// Incomplete submissions can be edited. (Presumably author.)
if ($submission->getData('dateSubmitted') == null) {
return true;
Expand Down
4 changes: 2 additions & 2 deletions cypress/tests/data/60-content/CallanSubmission.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,12 +165,12 @@ describe('Data suite tests', function() {
cy.waitJQuery();

// File completion
cy.get('table[id^="component-grid-catalogentry-publicationformatgrid-"] tr:contains("epilogue.pdf") a[id*="-isComplete-not_approved-button-"]').click();
cy.get('table[id^="component-grid-catalogentry-publicationformatgrid-"]').contains('tr', 'epilogue.pdf').find('a[id*="-isComplete-"]').scrollIntoView().click();
cy.get('form[id="assignPublicIdentifierForm"] button[id^="submitFormButton-"]').click();
cy.waitJQuery();

// File availability
cy.get('table[id^="component-grid-catalogentry-publicationformatgrid-"] tr:contains("epilogue.pdf") a[id*="-isAvailable-editApprovedProof-button-"]').click();
cy.get('table[id^="component-grid-catalogentry-publicationformatgrid-"]').contains('tr', 'epilogue.pdf').find('a[id*="-isAvailable-"]').scrollIntoView().click();
cy.get('input[id="openAccess"]').click();
cy.get('form#approvedProofForm button.submitFormButton').click();

Expand Down
2 changes: 1 addition & 1 deletion cypress/tests/integration/Payments.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ describe('Payments', function() {
cy.get('.formButtons .submitFormButton').click();
cy.get('button').contains('Publish').click();
cy.get('[data-cy="active-modal"] button').contains('Publish').click();
cy.contains('This version has been published and can not be edited.');
cy.contains('Warning: This version has been published. Editing it may impact the published content.');
cy.logout();
});

Expand Down