Upgrade error 3.3.0-21

Hello all,
I just upgraded my OJS from 3.3.0-13 to 3.3.0-21. The upgrade process went smoothly with no errors.
But when I log in and click on the “Submissions” tab, it pops up an error message.
Please see the screenshots and error messages for details - thanks.

==============================================

[25-Jun-2025 11:04:35 ] Slim Application Error:
Type: TypeError
Message: Cannot access offset of type string on string
File: /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSchemaService.inc.php
Line: 579
Trace: #0 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionFileService.inc.php(200): PKP\Services\PKPSchemaService->addMissingMultilingualValues()
#1 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionFileService.inc.php(224): PKP\Services\PKPSubmissionFileService->getProperties()
#2 /var/www/jms-3.3.0-21/classes/services/GalleyService.inc.php(154): PKP\Services\PKPSubmissionFileService->getFullProperties()
#3 /var/www/jms-3.3.0-21/classes/services/GalleyService.inc.php(179): APP\Services\GalleyService->getProperties()
#4 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPPublicationService.inc.php(208): APP\Services\GalleyService->getSummaryProperties()
#5 [internal function]: PKP\Services\PKPPublicationService->PKP\Services{closure}()
#6 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPPublicationService.inc.php(210): array_map()
#7 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPPublicationService.inc.php(235): PKP\Services\PKPPublicationService->getProperties()
#8 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionService.inc.php(206): PKP\Services\PKPPublicationService->getSummaryProperties()
#9 [internal function]: PKP\Services\PKPSubmissionService->PKP\Services{closure}()
#10 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionService.inc.php(210): array_map()
#11 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionService.inc.php(299): PKP\Services\PKPSubmissionService->getProperties()
#12 /var/www/jms-3.3.0-21/lib/pkp/api/v1/_submissions/PKPBackendSubmissionsHandler.inc.php(160): PKP\Services\PKPSubmissionService->getBackendListProperties()
#13 [internal function]: PKPBackendSubmissionsHandler->getMany()
#14 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(40): call_user_func()
#15 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(281): Slim\Handlers\Strategies\RequestResponse->__invoke()
#16 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->__invoke()
#17 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/Route.php(268): Slim\Route->callMiddlewareStack()
#18 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/App.php(503): Slim\Route->run()
#19 /var/www/jms-3.3.0-21/lib/pkp/classes/security/authorization/internal/ApiAuthorizationMiddleware.inc.php(77): Slim\App->__invoke()
#20 [internal function]: ApiAuthorizationMiddleware->__invoke()
#21 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#22 [internal function]: Slim\DeferredCallable->__invoke()
#23 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#24 /var/www/jms-3.3.0-21/lib/pkp/classes/security/authorization/internal/ApiCsrfMiddleware.inc.php(46): Slim\App->Slim{closure}()
#25 [internal function]: ApiCsrfMiddleware->__invoke()
#26 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#27 [internal function]: Slim\DeferredCallable->__invoke()
#28 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#29 /var/www/jms-3.3.0-21/lib/pkp/classes/security/authorization/internal/ApiTokenDecodingMiddleware.inc.php(131): Slim\App->Slim{closure}()
#30 [internal function]: ApiTokenDecodingMiddleware->__invoke()
#31 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#32 [internal function]: Slim\DeferredCallable->__invoke()
#33 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#34 /var/www/jms-3.3.0-21/lib/pkp/classes/handler/APIHandler.inc.php(68): Slim\App->Slim{closure}()
#35 [internal function]: APIHandler->{closure}()
#36 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#37 [internal function]: Slim\DeferredCallable->__invoke()
#38 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#39 /var/www/jms-3.3.0-21/lib/pkp/classes/handler/APIHandler.inc.php(127): Slim\App->Slim{closure}()
#40 [internal function]: APIHandler->{closure}()
#41 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#42 [internal function]: Slim\DeferredCallable->__invoke()
#43 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#44 /var/www/jms-3.3.0-21/lib/pkp/classes/handler/APIHandler.inc.php(132): Slim\App->Slim{closure}()
#45 [internal function]: APIHandler->{closure}()
#46 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#47 [internal function]: Slim\DeferredCallable->__invoke()
#48 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#49 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim{closure}()
#50 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/App.php(392): Slim\App->callMiddlewareStack()
#51 /var/www/jms-3.3.0-21/lib/pkp/classes/handler/APIHandler.inc.php(124): Slim\App->process()
#52 [internal function]: APIHandler->{closure}()
#53 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#54 [internal function]: Slim\DeferredCallable->__invoke()
#55 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#56 /var/www/jms-3.3.0-21/lib/pkp/classes/handler/APIHandler.inc.php(132): Slim\App->Slim{closure}()
#57 [internal function]: APIHandler->{closure}()
#58 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/DeferredCallable.php(57): call_user_func_array()
#59 [internal function]: Slim\DeferredCallable->__invoke()
#60 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func()
#61 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim{closure}()
#62 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/App.php(392): Slim\App->callMiddlewareStack()
#63 /var/www/jms-3.3.0-21/lib/pkp/lib/vendor/slim/slim/Slim/App.php(297): Slim\App->process()
#64 /var/www/jms-3.3.0-21/lib/pkp/classes/core/APIRouter.inc.php(115): Slim\App->run()
#65 /var/www/jms-3.3.0-21/lib/pkp/classes/core/Dispatcher.inc.php(144): APIRouter->route()
#66 /var/www/jms-3.3.0-21/lib/pkp/classes/core/PKPApplication.inc.php(360): Dispatcher->dispatch()
#67 /var/www/jms-3.3.0-21/index.php(68): PKPApplication->execute()
#68 {main}
View in rendered output by enabling the “displayErrorDetails” setting.

Hi Asmecher,

Could you give me a quick hint on how to resolve this issue?

Thanks

-PT

Hi @Ptran,

I think you’re running into bad data in your database, similar to this issue but in a different table. Try the following SQL query:

SELECT a.setting_name
FROM submission_file_settings a
JOIN submission_file_settings b ON (a.setting_name = b.setting_name)
WHERE (a.locale IS NOT NULL AND a.locale <> '')
AND (b.locale IS NULL OR b.locale = '');

You should get no results, but I suspect you’ll get some. These will have to be resolved before the upgrade will work.

Regards,
Alec Smecher
Public Knowledge Project Team

Hello Asmecher,

Here is the output.

Indeed, you’re correct. I also found duplicate values in the ‘name’ column under setting_name. What should I keep and what should I delete? Should I remove entries with empty spaces or 0?

Hi @Ptran,

Entries in submission_files with setting_name=’name’ should have a valid locale code in the locale column. Empty entries and 0 are not valid.

Thanks,
Alec Smecher
Public Knowledge Project Team

Hi Asmecher,

I was able to delete duplicate entries and empty values. Everything is working now.

Thanks so much!

For learning purposes, could you tell me how I could identify which table is causing the issue by looking at the error above?

Hi @Ptran,

Glad to hear it’s working!

This line in the stack trace was the clue for me:

#1 /var/www/jms-3.3.0-21/lib/pkp/classes/services/PKPSubmissionFileService.inc.php(224): PKP\Services\PKPSubmissionFileService->getProperties()

It’s almost the deepest part of the stack trace (#1), and comes from PKPSubmissionFileService. The line of the trace just above it mentions addMissingMultilingualValues(), which I know is responsible for rehydrating the SubmissionFile object from the submission_files database table using the contents of the submission_file_settings table.

Sorry, that’s a little arcane, but that’s how I spotted it!

Regards,
Alec Smecher
Public Knowledge Project Team

I learned something new today, I appreciated all your help!

Bests,

-PT

1 Like

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