Describe the issue or problem
When submission checklist is empty, it is not possible to add a new item.
php8 also return a fatal error
Steps I took leading up to the issue
- go to workflow for a journal
- go to submission checklist
- delete all items if any left
- add new item
What application are you using?
OJS 3.3.0-14
Additional information
I made this patch to make it work. So maybe it could be solved in next version.
For some reason after an upgrade from 3.1 some checklists was empty. Seems to be because of order not starting from 1 (Those where reentered to solve it). Some also had wrong format (Could be solved by refreshing checklist in old version)
The patch :
--- ./lib/pkp/controllers/grid/settings/submissionChecklist/form/SubmissionChecklistForm.inc.php_org 2023-03-21 14:21:34.143530685 +0100
+++ ./lib/pkp/controllers/grid/settings/submissionChecklist/form/SubmissionChecklistForm.inc.php 2023-03-23 17:36:02.062571723 +0100
@@ -93,28 +93,36 @@
$router = $request->getRouter();
$context = $router->getContext($request);
$submissionChecklistAll = $context->getData('submissionChecklist');
- $locale = AppLocale::getPrimaryLocale();
- //FIXME: a bit of kludge to get unique submissionChecklist id's
- $this->submissionChecklistId = ($this->submissionChecklistId != null ? $this->submissionChecklistId:(max(array_keys($submissionChecklistAll[$locale])) + 1));
+ $order = 0;
+ // PHP 8 fix
+ // Fixes adding an checklist item when no items left
+ $locale = AppLocale::getPrimaryLocale();
+ if (isset($submissionChecklistAll[$locale]) && !empty($submissionChecklistAll[$locale]) ) {
+ //FIXME: a bit of kludge to get unique submissionChecklist id's
+ $this->submissionChecklistId = ($this->submissionChecklistId != null ? $this->submissionChecklistId:(max(array_keys($submissionChecklistAll[$locale])) + 1));
+ foreach ($submissionChecklistAll[$locale] as $checklistItem) {
+ if ($checklistItem['order'] > $order) {
+ $order = $checklistItem['order'];
+ }
+ }
- $order = 0;
- foreach ($submissionChecklistAll[$locale] as $checklistItem) {
- if ($checklistItem['order'] > $order) {
- $order = $checklistItem['order'];
- }
- }
- $order++;
+ } else {
+ $this->submissionChecklistId = ($this->submissionChecklistId ?? 1);
+ }
- $checklistItem = $this->getData('checklistItem');
- foreach (AppLocale::getSupportedLocales() as $locale => $name) {
- if (isset($checklistItem[$locale])) {
- $submissionChecklistAll[$locale][$this->submissionChecklistId]['content'] = $checklistItem[$locale];
- $submissionChecklistAll[$locale][$this->submissionChecklistId]['order'] = $order;
- }
- }
+ $order++;
+
+ $checklistItem = $this->getData('checklistItem');
+ foreach (AppLocale::getSupportedLocales() as $locale => $name) {
+ if (isset($checklistItem[$locale])) {
+ $submissionChecklistAll[$locale][$this->submissionChecklistId]['content'] = $checklistItem[$locale];
+ $submissionChecklistAll[$locale][$this->submissionChecklistId]['order'] = $order;
+ }
+ }
+
+ $context->updateSetting('submissionChecklist', $submissionChecklistAll, 'object', true);
+ parent::execute(...$functionArgs);
- $context->updateSetting('submissionChecklist', $submissionChecklistAll, 'object', true);
- parent::execute(...$functionArgs);
return true;
}
}