Skip to content

Commit

Permalink
pkp/pkp-lib#7165 Issue datePublished can be set when adding an issue
Browse files Browse the repository at this point in the history
  • Loading branch information
ajnyga committed Sep 29, 2022
1 parent c52e7b8 commit 9b624a1
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 19 deletions.
6 changes: 5 additions & 1 deletion classes/controllers/grid/issues/IssueGridHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -547,7 +547,11 @@ public function publishIssue($args, $request)
}

$issue->setPublished(1);
$issue->setDatePublished(Core::getCurrentDate());

// If no datePublished was given, use current date
if (!$issue->getData('datePublished')) {
$issue->setDatePublished(Core::getCurrentDate());
}

// If subscriptions with delayed open access are enabled then
// update open access date according to open access delay policy
Expand Down
36 changes: 26 additions & 10 deletions classes/publication/Repository.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,19 +145,35 @@ public function version(Publication $publication): int
return $newId;
}

/** @copydoc \PKP\publication\Repository::setStatusOnPublish() */
/**
* Set the status and date of publication
*
* A publication's status and date of publication will be set depending
* on the issue it is assigned to. Publications in future issues should
* be set to `STATUS_SCHEDULED`. Otherwise, they should be set to
* `STATUS_PUBLISHED` and should inherit the date of publication from the
* issue, unless a date of publication has already been set.
*
* Usually, the date of publication will be set when the issue is
* published. In some unusual cases, a publication may be published
* without an issue. This may happen in a continuous publishing model
* where articles are published right away. In these cases, the date of
* publication should be set to the current date, unless a date of
* publication has already been set.
*/
protected function setStatusOnPublish(Publication $publication)
{
// A publication may be scheduled in a future issue. In such cases,
// the `datePublished` should remain empty and the status should be set to
// scheduled.
//
// If there is no assigned issue, the journal may be using a continuous
// publishing model in which articles are published right away.
$issue = Repo::issue()->get($publication->getData('issueId'));
if ($issue && !$issue->getData('published')) {
$publication->setData('datePublished', null);
$publication->setData('status', Submission::STATUS_SCHEDULED);

if ($issue) {
if ($issue->getData('published')) {
$publication->setData('status', Submission::STATUS_PUBLISHED);
if (!$publication->getData('datePublished')) {
$publication->setData('datePublished', $issue->getData('datePublished'));
}
} else {
$publication->setData('status', Submission::STATUS_SCHEDULED);
}
} else {
$publication->setData('status', Submission::STATUS_PUBLISHED);
if (!$publication->getData('datePublished')) {
Expand Down
8 changes: 4 additions & 4 deletions controllers/grid/issues/IssueGridRow.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,16 @@ public function initialize($request, $template = null)
$dispatcher = $request->getDispatcher();
$this->addAction(
new LinkAction(
$issue->getDatePublished() ? 'viewIssue' : 'previewIssue',
$issue->getPublished() ? 'viewIssue' : 'previewIssue',
new OpenWindowAction(
$dispatcher->url($request, PKPApplication::ROUTE_PAGE, null, 'issue', 'view', [$issueId])
),
__($issue->getDatePublished() ? 'grid.action.viewIssue' : 'grid.action.previewIssue'),
__($issue->getPublished() ? 'grid.action.viewIssue' : 'grid.action.previewIssue'),
'information'
)
);

if ($issue->getDatePublished()) {
if ($issue->getPublished()) {
$this->addAction(
new LinkAction(
'unpublish',
Expand Down Expand Up @@ -109,7 +109,7 @@ public function initialize($request, $template = null)

$currentIssue = Repo::issue()->getCurrent($issue->getJournalId());
$isCurrentIssue = $currentIssue != null && $issue->getId() == $currentIssue->getId();
if ($issue->getDatePublished() && !$isCurrentIssue) {
if ($issue->getPublished() && !$isCurrentIssue) {
$this->addAction(
new LinkAction(
'setCurrentIssue',
Expand Down
16 changes: 15 additions & 1 deletion controllers/grid/issues/form/IssueForm.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public function __construct($issue = null)
return !$showTitle || implode('', $form->getData('title')) != '' ? true : false;
}));
$this->addCheck(new \PKP\form\validation\FormValidatorRegExp($this, 'urlPath', 'optional', 'validator.alpha_dash_period', '/^[a-zA-Z0-9]+([\\.\\-_][a-zA-Z0-9]+)*$/'));

$this->addCheck(new \PKP\form\validation\FormValidatorPost($this));
$this->addCheck(new \PKP\form\validation\FormValidatorCSRF($this));
$this->issue = $issue;
Expand Down Expand Up @@ -142,6 +143,12 @@ public function validate($callHooks = true)
}
}

// Published issue has to have datePublished set
if (!$this->getData('datePublished') && $this->issue->getPublished()) {
$this->addError('datePublished', __('editor.issues.datePublished.requiredWhenPublished'));
$this->addErrorField('datePublished');
}

return parent::validate($callHooks);
}

Expand Down Expand Up @@ -241,9 +248,16 @@ public function execute(...$functionArgs)
$issue->setVolume(empty($volume) ? null : $volume);
$issue->setNumber(empty($number) ? null : $number);
$issue->setYear(empty($year) ? null : $year);
if (!$isNewIssue) {

// If issue is not published, allow empty datePublished
if (!$this->getData('datePublished') && !$issue->getPublished()) {
$issue->setDatePublished(null);
}

if ($this->getData('datePublished')) {
$issue->setDatePublished($this->getData('datePublished'));
}

$issue->setDescription($this->getData('description'), null); // Localized
$issue->setShowVolume((int) $this->getData('showVolume'));
$issue->setShowNumber((int) $this->getData('showNumber'));
Expand Down
6 changes: 6 additions & 0 deletions locale/en_US/editor.po
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,12 @@ msgstr "Unpublished"
msgid "editor.issues.datePublished"
msgstr "Date Published"

msgid "editor.issues.datePublished.notPublished.description"
msgstr "Leave this empty and it will be set automatically when the issue is published."

msgid "editor.issues.datePublished.requiredWhenPublished"
msgstr "Date Published is required when the issue is published."

msgid "editor.issues.volumeRequired"
msgstr "Volume is required and must be a positive, numeric value."

Expand Down
5 changes: 2 additions & 3 deletions templates/controllers/grid/issues/form/issueForm.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,15 @@
{assign var=issuePublished value=false}
{/if}

{if $issuePublished}
{fbvFormArea id="datePublishedArea" title="editor.issues.datePublished"}
{fbvFormSection}
{if $issuePublished}
{fbvElement type="text" id="datePublished" value=$datePublished size=$fbvStyles.size.SMALL class="datepicker"}
{else}
{fbvElement type="text" id="datePublished" value=$datePublished size=$fbvStyles.size.SMALL class="datepicker" label="editor.issues.datePublished.notPublished.description"}
{/if}
{/fbvFormSection}
{/fbvFormArea}
{/if}


{fbvFormArea id="identificationArea" title="editor.issues.identification"}
{fbvFormSection}
Expand Down

0 comments on commit 9b624a1

Please sign in to comment.