Unable to invite user in ojs 3.5.0

Describe the issue or problem
Unable to invite users when using the roles of Journal Manager, Production Editor, or Section Editor. An error appears stating that the requested email template was not found.

What application are you using?
For example, OJS 3.5.0.0

Additional information
attached

1 Like

Experienced the same issue.

The same issue in local
I think we should have “Skip email” feature like 3.4.0 when edit user role for current user.

I have already requested the PKP team to look into this matter, as it is a critical issue in OJS version 3.5.0.0. I strongly urge that this be treated as a priority and resolved at the earliest.

Hi asmecher staff,

Could you please look into this and let me know whether this issue is specific to me or if others are experiencing it as well? If it’s a general problem, kindly have your technical team review it or consider addressing it in the next patch update.

Thank you!

Because of this feature change, many journals in Indonesia have not considered upgrading to version 3.5. Hopefully the developers will find a solution soon.

Dear @rcgillis, @asmecher, and the OJS/PKP Team,

We would like to bring to your attention an issue we’ve encountered with role assignments in the current version of OJS. Specifically, assigning a user directly to the Production Editor role is not currently supported through the editorial workflow. This limitation makes it difficult to manage production tasks efficiently within our journal.

We hope that this issue can be reviewed and addressed in a future update. Kindly inform the technical team so the necessary adjustments can be made.

Thank you for your continued support and for the ongoing development of OJS.

Hi All

We encountered the same issue while upgrading from OJS 3.4 to 3.5. After analyzing it, we found that table data was missing when we successfully upgraded. Therefore, to fix this, you can download and use the default data from fresh OJS 3.5 installation below::

:link: email_template - Google Drive

To use it, please import this database into your OJS 3.5 database.

Important: Make sure to backup your database before doing this step.

Regards
Almadani

Hi Almadani,

Thanks for sharing your findings and the default data. I appreciate your effort in troubleshooting the issue.

However, I believe this issue may not be related to the database in our case. As far as I understand, OJS stores email templates in the file system as well, and I’ve already updated the relevant template files accordingly.

That said, I’m still awaiting input from the official OJS support team. Once they provide clarification or a recommended approach, I think it would be best for everyone to follow that.

Again, your help and feedback are much appreciated.

Best regards,
Nive

1 Like

I’m also facing this issue and would be appreciative to know how to add this template in for all journals (we have about 20 or so)

I am facing the same issue. Although the following code added the missing template and I can change the template accordingly but I am unable to add recepient name in the email so I reveted back the code. Looking for OJS team to address the issue please.

INSERT INTO email_templates_default_data (email_key, locale, subject, body)
VALUES
(‘USER_ROLE_ASSIGNMENT_INVITATION’, ‘en_US’,
‘Invitation to join as {$userGroupName} at {$contextName}’,
‘Dear {$recipientName},

You have been invited to join {$contextName} as a {$userGroupName}.

Please click the link below to accept the invitation:

{$acceptUrl}

If you do not wish to accept this invitation, you may ignore this email.

Sincerely,
{$contextSignature}’);

I would like to share the error is not due to incomplete update as I’ve seen the upgrade successful message. Later, I upgraded another installation to 3.5 and the same issue exists.

We’ve been able to fix it using the following SQL globally:

INSERT INTO `email_templates_default_data` ( `email_key`, `locale`, `name`, `subject`, `body`) VALUES
('USER_ROLE_ASSIGNMENT_INVITATION', 'en', '', '{$journalName}: You are invited to new roles', '<div class=\'email-container\'>\r\n    <div class=\'email-header\'>\r\n        <h2>Invitation to New Role</h2>\r\n    </div>\r\n    <div class=\'email-content\'>\r\n        <p>Dear {$journalName},</p>\r\n        <p>In light of your expertise, you have been invited by {$inviterName} to take on new roles at {$journalName}</p>\r\n        <p>At {$journalName}, we value your privacy. As such, we have taken steps to ensure that we are fully GDPR compliant. These steps include you being accountable to enter your own data and choosing who can see what information. For additional information on how we handled your data, please refer to our Privacy Policy.</p>\r\n        <div>{$existingRoles}</div>\r\n        <div>{$rolesAdded}</div>\r\n        <p>On accepting the invite, you will be redirected to {$journalName}</p>\r\n        <p>Feel free to contact me with any questions about the process.</p>\r\n        <p><a href=\'{$acceptUrl}\' class=\'btn btn-accept\'>Accept Invitation</a></p>\r\n        <p><a href=\'{$declineUrl}\' class=\'btn btn-decline\'>Decline Invitation</a></p>\r\n        <p>Kind regards,</p>\r\n        <p>{$journalName}</p>\r\n    </div>\r\n</div>\r\n<style>\r\n{$emailTemplateStyle}\r\n</style>');

It is quite long but this is using the strings out of PKP-Lib and OJS following the migration which should have picked this up, but wasn’t for one reason or another

Based on my knowledge and research, I suggest everyone wait for the next OJS update. According to the milestone, they plan to release version 3.5.0.1 soon with important bug fixes. Manually importing anything into the database can be harmful, so proceed at your own risk.

Hi , an issue has been filed at [Invitation] | User role assignment email template missing at upgrade to 3.5.0 · Issue #11603 · pkp/pkp-lib · GitHub and the fix hopefully will be included in the next release .

1 Like

Thank you so much for taking the initiative to investigate and file the issue — truly appreciated!

We’re incredibly grateful to see that the problem has already been documented at Invitation | User role assignment email template missing at upgrade to 3.5.0 · Issue #11603 · pkp/pkp-lib, and it’s fantastic to know that a fix is being considered for the next release.

Huge thanks and kudos to the OJS development team for your continued efforts in maintaining and improving the platform. Your responsiveness and dedication to resolving issues like this make a world of difference to the entire community.

Looking forward to the upcoming update!

1 Like

Hello Nive. A release for 3.5.0-1 has the required #11603 patch. Please see the release announcement post. This should resolve the issue you were seeing.

Thank you for the information. I’ll check if everything is working as expected with the new release.

After successfully upgrading to OJS 3.5.0-1, the update went smoothly, and I checked the native user roles. The templates are now appearing, but the system seems to be stuck. Is anyone else encountering the same issue, or is everything working fine for others?

1 Like

@Nive , can you take a look at your error log file to see what error/exception is logging there ? I just run few test upgrade from both 3.4.0 to 3.5.0-1 and 3.5.0-0 to 3.5.0-1 and in both case, I am able to compete the a new user invitation process without any issue .

[13-Jul-2025 10:37:56 UTC] TypeError: PKP\invitation\invitations\userRoleAssignment\helpers\UserGroupHelper::formatDate(): Argument #1 ($timestamp) must be of type string, null given, called in /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/invitations/userRoleAssignment/helpers/UserGroupHelper.php on line 43 and defined in /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/invitations/userRoleAssignment/helpers/UserGroupHelper.php:58
Stack trace:
#0 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/invitations/userRoleAssignment/helpers/UserGroupHelper.php(43): PKP\invitation\invitations\userRoleAssignment\helpers\UserGroupHelper::formatDate(NULL)
#1 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/mail/mailables/UserRoleAssignmentInvitationNotify.php(97): PKP\invitation\invitations\userRoleAssignment\helpers\UserGroupHelper::fromArray(Array)
#2 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/mail/mailables/UserRoleAssignmentInvitationNotify.php(207): PKP\mail\mailables\UserRoleAssignmentInvitationNotify->getAllUserUserGroupSection(Array, NULL, Object(APP\journal\Journal), ‘en’, ‘

Already …’)
#3 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/invitations/userRoleAssignment/UserRoleAssignmentInvite.php(97): PKP\mail\mailables\UserRoleAssignmentInvitationNotify->setData(‘en’)
#4 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/core/Invitation.php(312): PKP\invitation\invitations\userRoleAssignment\UserRoleAssignmentInvite->getMailable()
#5 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/invitation/invitations/userRoleAssignment/handlers/api/UserRoleAssignmentCreateController.php(127): PKP\invitation\core\Invitation->invite()
#6 /home/vialakok/journalsiitmjp.com/lib/pkp/api/v1/invitations/InvitationController.php(314): PKP\invitation\invitations\userRoleAssignment\handlers\api\UserRoleAssignmentCreateController->invite(Object(Illuminate\Http\Request))
#7 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/CallableDispatcher.php(40): PKP\API\v1\invitations\InvitationController->invite(Object(Illuminate\Http\Request), ‘iitmjbs’, ‘v1’, ‘2’)
#8 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Route.php(244): Illuminate\Routing\CallableDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(Closure))
#9 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Route.php(215): Illuminate\Routing\Route->runCallable()
#10 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Router.php(808): Illuminate\Routing\Route->run()
#11 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(170): Illuminate\Routing\Router->Illuminate\Routing{closure}(Object(Illuminate\Http\Request))
#12 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/middleware/HasRoles.php(75): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#13 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): PKP\middleware\HasRoles->handle(Object(Illuminate\Http\Request), Object(Closure), Object(Illuminate\Support\Collection))
#14 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/middleware/HasContext.php(35): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#15 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): PKP\middleware\HasContext->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /home/vialakok/journalsiitmjp.com/lib/pkp/classes/middleware/HasUser.php(35): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#17 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(209): PKP\middleware\HasUser->handle(Object(Illuminate\Http\Request), Object(Closure))
#18 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(127): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}(Object(Illuminate\Http\Request))
#19 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Router.php(807): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#20 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Router.php(786): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#21 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Router.php(750): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#22 /home/vialakok/journalsiitmjp.com/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Routing/Router.php(739): Illuminate\Routing\Router->dispatchToRout