OJS 3.4.0.1 - New submissions are not submitted - Slim Application Error: Type: Error Message: Call to a member function getRecommendOnly()

Hello,
After upgrading to OJS 3.4.0.1, it seems everything was working fine. But today, I realized that journal is not receiving any new submissions because at the final step when author press submit button, wheel start spinning and nothing happened. PHP error log shows the following:

[13-Jul-2023 20:40:03 UTC] Slim Application Error:
Type: Error
Message: Call to a member function getRecommendOnly() on null
File: /home/seisense/journal.seisense.com/lib/pkp/classes/context/SubEditorsDAO.php
Line: 222
Trace: #0 /home/seisense/journal.seisense.com/lib/pkp/classes/observers/listeners/AssignEditors.php(50): PKP\context\SubEditorsDAO->assignEditors()
#1 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(441): PKP\observers\listeners\AssignEditors->handle()
#2 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php(249): Illuminate\Events\Dispatcher->Illuminate\Events{closure}()
#3 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(451): Illuminate\Events\Dispatcher->dispatch()
#4 /home/seisense/journal.seisense.com/lib/pkp/classes/submission/Repository.php(595): event()
#5 /home/seisense/journal.seisense.com/lib/pkp/api/v1/submissions/PKPSubmissionHandler.php(709): PKP\submission\Repository->submit()
#6 [internal function]: PKP\API\v1\submissions\PKPSubmissionHandler->submit()
#7 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(40): call_user_func()
#8 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(281): Slim\Handlers\Strategies\RequestResponse->__invoke()
#9 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->__invoke()
#10 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(268): Slim\Route->callMiddlewareStack()
#11 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/App.php(503): Slim\Route->run()
#12 /home/seisense/journal.seisense.com/lib/pkp/classes/security/authorization/internal/ApiAuthorizationMiddleware.php(90): Slim\App->__invoke()
#13 [internal function]: PKP\security\authorization\internal\ApiAuthorizationMiddleware->__invoke()
#14 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#15 [internal function]: Slim\DeferredCallable->__invoke()
#16 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#17 /home/seisense/journal.seisense.com/lib/pkp/classes/security/authorization/internal/ApiCsrfMiddleware.php(56): Slim\App->Slim{closure}()
#18 [internal function]: PKP\security\authorization\internal\ApiCsrfMiddleware->__invoke()
#19 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#20 [internal function]: Slim\DeferredCallable->__invoke()
#21 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#22 /home/seisense/journal.seisense.com/lib/pkp/classes/security/authorization/internal/ApiTokenDecodingMiddleware.php(140): Slim\App->Slim{closure}()
#23 [internal function]: PKP\security\authorization\internal\ApiTokenDecodingMiddleware->__invoke()
#24 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#25 [internal function]: Slim\DeferredCallable->__invoke()
#26 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#27 /home/seisense/journal.seisense.com/lib/pkp/classes/handler/APIHandler.php(83): Slim\App->Slim{closure}()
#28 [internal function]: PKP\handler\APIHandler->PKP\handler{closure}()
#29 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#30 [internal function]: Slim\DeferredCallable->__invoke()
#31 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#32 /home/seisense/journal.seisense.com/lib/pkp/classes/handler/APIHandler.php(100): Slim\App->Slim{closure}()
#33 [internal function]: PKP\handler\APIHandler->PKP\handler{closure}()
#34 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#35 [internal function]: Slim\DeferredCallable->__invoke()
#36 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#37 /home/seisense/journal.seisense.com/lib/pkp/classes/handler/APIHandler.php(105): Slim\App->Slim{closure}()
#38 [internal function]: PKP\handler\APIHandler->PKP\handler{closure}()
#39 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#40 [internal function]: Slim\DeferredCallable->__invoke()
#41 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#42 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim{closure}()
#43 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/App.php(392): Slim\App->callMiddlewareStack()
#44 /home/seisense/journal.seisense.com/lib/pkp/lib/vendor/slim/slim/Slim/App.php(297): Slim\App->process()
#45 /home/seisense/journal.seisense.com/lib/pkp/classes/core/APIRouter.php(110): Slim\App->run()
#46 /home/seisense/journal.seisense.com/lib/pkp/classes/core/Dispatcher.php(165): PKP\core\APIRouter->route()
#47 /home/seisense/journal.seisense.com/lib/pkp/classes/core/PKPApplication.php(373): PKP\core\Dispatcher->dispatch()
#48 /home/seisense/journal.seisense.com/index.php(21): PKP\core\PKPApplication->execute()
#49 {main}
View in rendered output by enabling the “displayErrorDetails” setting.

As the authors are not able to submit any new submissions so this is urgent. Any expert suggestions to trace down this issue would be highly appreaciated.

More inforamtion:
Upgrade was successful in the first attempt.
OJS: 3.4.0.1
PHP: 8.1

Thanks and regards
seisense

A further investigation and steps have revealed the following intersting facts:

1- When author press the submit button, a new window pops up and wheel keep spinning wihout any end.

2- It throws the “slim error” in PHP error log example pasted above.
3- In parallel, the OJS dashboard of “Admin” already started showing the submission in " Active tab" showing the message
“No editor has been assigned to this submission. Assign Editor”

But as you can see in the below screenshot, a section editor for the said section is already assinged by default, so the new submission should show up in " My Queue" but it is not.

Do you see any relation of the slim application error with this instance? Posting these details for the experts, if these are of any help to track down the issue.
Thanks and looking forward to your suggestions.
Regards
seisense

Hi @seisense,

Can you try the following change to see if it resolves the problem for you?

  • Edit lib/pkp/classes/context/SubEditorsDAO.php
  • Find the code (around line 206) that reads:
    $userGroups = Repo::userGroup()
             ->getCollector()
             ->filterByContextIds([$submission->getData('contextId')])
             ->getMany();
    
  • Change the last line to add a call to remember():
             ->getMany()->remember();
    

Please let me know if that fixes the problem. If my hypothesis is correct, this will be a hard-to-replicate problem on my local machine, so your confirmation would be very helpful!

Regards,
Alec Smecher
Public Knowledge Project Team

Hi @asmecher ,
I applied the change (see screenshot) but it does not help. Still the same behavior with the same error message in php error log…

Regards
seisense

Hi @seisense,

Ah – I think we’ve hit another case of exact numeric tests causing problems. Find line 222 (or so) in lib/pkp/classes/context/SubEditorsDAO.php:

$userGroup = $userGroups->first(fn (UserGroup $userGroup) => $userGroup->getId() === $assignment->userGroupId);

Try changing === to ==:

$userGroup = $userGroups->first(fn (UserGroup $userGroup) => $userGroup->getId() == $assignment->userGroupId);

(Filed and fixed: PHP fatal error when assigning editors to new submissions · Issue #9168 · pkp/pkp-lib · GitHub)

Thanks,
Alec Smecher
Public Knowledge Project Team

Hi @asmecher ,
Yes, perfect solution. thanks once again for the catch…
regards
seisense

1 Like

Hi @seisense,

Sorry you keep running into these – but please keep reporting them if you find more, and I’ll do my best to resolve them quickly!

Regards,
Alec Smecher
Public Knowledge Project Team

1 Like

This topic was automatically closed after 9 days. New replies are no longer allowed.