pkp / pkp-lib

The library used by PKP's applications OJS, OMP and OPS, open source software for scholarly publishing.
https://pkp.sfu.ca
GNU General Public License v3.0
297 stars 443 forks source link

Import/Export users is not working between same version of OJS 3.3.0-rc3 #8964

Closed marcbria closed 1 year ago

marcbria commented 1 year ago

Describe the bug Importation fails due key constrain and no feedback is sent to users.

Log throws following error:

[Thu May 04 18:24:34.518946 2023] [php:error] [pid 20] [client 172.19.0.13:48402] PHP Fatal error:  Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-1' for key 'user_user_groups_unique' in /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php:545\nStack trace:\n#0 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(545): PDOStatement->execute()\n#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\\Database\\Connection->Illuminate\\Database\\{closure}()\n#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(720): Illuminate\\Database\\Connection->runQueryCallback()\n#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(546): Illuminate\\Database\\Connection->run()\n#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(498): Illuminate\\Database\\Connection->statement()\n#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3274): Illuminate\\Database\\Connection->insert()\n#6 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1869): Illuminate\\Database\\Query\\Builder->insert()\n#7 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1306): Illuminate\\Database\\Eloquent\\Builder->__call()\n#8 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1138): Illuminate\\Database\\Eloquent\\Model->performInsert()\n#9 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(986): Illuminate\\Database\\Eloquent\\Model->save()\n#10 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Support/helpers.php(306): Illuminate\\Database\\Eloquent\\Builder->Illuminate\\Database\\Eloquent\\{closure}()\n#11 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(987): tap()\n#12 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Database\\Eloquent\\Builder->create()\n#13 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2330): Illuminate\\Database\\Eloquent\\Model->forwardCallTo()\n#14 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2342): Illuminate\\Database\\Eloquent\\Model->__call()\n#15 /var/www/html/lib/pkp/classes/userGroup/Repository.php(261): Illuminate\\Database\\Eloquent\\Model::__callStatic()\n#16 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(305): PKP\\userGroup\\Repository->assignUserToGroup()\n#17 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(344): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->parseUser()\n#18 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(327): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->handleChildElement()\n#19 /var/www/html/lib/pkp/plugins/importexport/native/filter/NativeImportFilter.php(50): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->handleElement()\n#20 /var/www/html/lib/pkp/classes/filter/Filter.php(498): PKP\\plugins\\importexport\\native\\filter\\NativeImportFilter->process()\n#21 /var/www/html/lib/pkp/plugins/importexport/users/PKPUserImportExportPlugin.php(270): PKP\\filter\\Filter->execute()\n#22 /var/www/html/lib/pkp/plugins/importexport/users/PKPUserImportExportPlugin.php(144): PKP\\plugins\\importexport\\users\\PKPUserImportExportPlugin->importUsers()\n#23 /var/www/html/lib/pkp/pages/management/PKPToolsHandler.php(102): PKP\\plugins\\importexport\\users\\PKPUserImportExportPlugin->display()\n#24 [internal function]: PKP\\pages\\management\\PKPToolsHandler->importexport()\n#25 /var/www/html/lib/pkp/classes/core/PKPRouter.php(333): call_user_func()\n#26 /var/www/html/lib/pkp/classes/core/PKPPageRouter.php(278): PKP\\core\\PKPRouter->_authorizeInitializeAndCallRequest()\n#27 /var/www/html/lib/pkp/classes/core/Dispatcher.php(165): PKP\\core\\PKPPageRouter->route()\n#28 /var/www/html/lib/pkp/classes/core/PKPApplication.php(372): PKP\\core\\Dispatcher->dispatch()\n#29 /var/www/html/index.php(28): PKP\\core\\PKPApplication->execute()\n#30 {main}\n\nNext Illuminate\\Database\\QueryException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2-1' for key 'user_user_groups_unique' (SQL: insert into `user_user_groups` (`user_id`, `user_group_id`) values (1, 2)) in /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php:760\nStack trace:\n#0 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(720): Illuminate\\Database\\Connection->runQueryCallback()\n#1 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(546): Illuminate\\Database\\Connection->run()\n#2 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(498): Illuminate\\Database\\Connection->statement()\n#3 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3274): Illuminate\\Database\\Connection->insert()\n#4 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(1869): Illuminate\\Database\\Query\\Builder->insert()\n#5 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1306): Illuminate\\Database\\Eloquent\\Builder->__call()\n#6 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1138): Illuminate\\Database\\Eloquent\\Model->performInsert()\n#7 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(986): Illuminate\\Database\\Eloquent\\Model->save()\n#8 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Support/helpers.php(306): Illuminate\\Database\\Eloquent\\Builder->Illuminate\\Database\\Eloquent\\{closure}()\n#9 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php(987): tap()\n#10 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php(23): Illuminate\\Database\\Eloquent\\Builder->create()\n#11 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2330): Illuminate\\Database\\Eloquent\\Model->forwardCallTo()\n#12 /var/www/html/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(2342): Illuminate\\Database\\Eloquent\\Model->__call()\n#13 /var/www/html/lib/pkp/classes/userGroup/Repository.php(261): Illuminate\\Database\\Eloquent\\Model::__callStatic()\n#14 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(305): PKP\\userGroup\\Repository->assignUserToGroup()\n#15 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(344): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->parseUser()\n#16 /var/www/html/lib/pkp/plugins/importexport/users/filter/UserXmlPKPUserFilter.php(327): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->handleChildElement()\n#17 /var/www/html/lib/pkp/plugins/importexport/native/filter/NativeImportFilter.php(50): PKP\\plugins\\importexport\\users\\filter\\UserXmlPKPUserFilter->handleElement()\n#18 /var/www/html/lib/pkp/classes/filter/Filter.php(498): PKP\\plugins\\importexport\\native\\filter\\NativeImportFilter->process()\n#19 /var/www/html/lib/pkp/plugins/importexport/users/PKPUserImportExportPlugin.php(270): PKP\\filter\\Filter->execute()\n#20 /var/www/html/lib/pkp/plugins/importexport/users/PKPUserImportExportPlugin.php(144): PKP\\plugins\\importexport\\users\\PKPUserImportExportPlugin->importUsers()\n#21 /var/www/html/lib/pkp/pages/management/PKPToolsHandler.php(102): PKP\\plugins\\importexport\\users\\PKPUserImportExportPlugin->display()\n#22 [internal fu

To Reproduce Steps to reproduce the behavior:

  1. In a OJS 3.4 rc3 I manually create some different users (including extended information).
  2. Then I export the user list using the users' native import/export plugin.
  3. After this, I delete all users (except admin).
  4. And I go to the import/export users plugin to IMPORT the previously exported list.
  5. When I submit, a new blank tab appears with no information but php log shows what I posted before.

What application are you using? OJS 3.4.0-rc3

Additional information imagen

touhidurabir commented 1 year ago

@asmecher PRs to review

pkp-lib --> https://github.com/pkp/pkp-lib/pull/9006 ojs --> https://github.com/pkp/ojs/pull/3910 [TEST ONLY]

I tried to reproduce the issue but just can't . But do understand where it can occur so added a check just to avoid it .

asmecher commented 1 year ago

@marcbria, could you try out the above PR to see if it resolves the issue for you?

asmecher commented 1 year ago

@touhidurabir, merged, thanks!

@marcbria, confirmation on whether it fixes things for you would be very welcome even though I'm closing the issue.