PageRenderTime 67ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/ojs/ojs-2.3.1-2/classes/user/UserAction.inc.php

https://github.com/mcrider/pkpUpgradeTestSuite
PHP | 204 lines | 139 code | 31 blank | 34 comment | 12 complexity | 4a6b56f038dbe3a77a14a85e2013809c MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1
  1. <?php
  2. /**
  3. * @file classes/user/UserAction.inc.php
  4. *
  5. * Copyright (c) 2003-2009 John Willinsky
  6. * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
  7. *
  8. * @class UserAction
  9. * @ingroup user
  10. * @see User
  11. *
  12. * @brief UserAction class.
  13. */
  14. // $Id: UserAction.inc.php,v 1.8 2009/05/21 22:53:24 michael Exp $
  15. class UserAction {
  16. /**
  17. * Constructor.
  18. */
  19. function UserAction() {
  20. }
  21. /**
  22. * Actions.
  23. */
  24. /**
  25. * Merge user accounts, including attributed articles etc.
  26. */
  27. function mergeUsers($oldUserId, $newUserId) {
  28. // Need both user ids for merge
  29. if (empty($oldUserId) || empty($newUserId)) {
  30. return false;
  31. }
  32. $articleDao =& DAORegistry::getDAO('ArticleDAO');
  33. foreach ($articleDao->getArticlesByUserId($oldUserId) as $article) {
  34. $article->setUserId($newUserId);
  35. $articleDao->updateArticle($article);
  36. unset($article);
  37. }
  38. $commentDao =& DAORegistry::getDAO('CommentDAO');
  39. foreach ($commentDao->getCommentsByUserId($oldUserId) as $comment) {
  40. $comment->setUserId($newUserId);
  41. $commentDao->updateComment($comment);
  42. unset($comment);
  43. }
  44. $articleNoteDao =& DAORegistry::getDAO('ArticleNoteDAO');
  45. $articleNotes =& $articleNoteDao->getArticleNotesByUserId($oldUserId);
  46. while ($articleNote =& $articleNotes->next()) {
  47. $articleNote->setUserId($newUserId);
  48. $articleNoteDao->updateArticleNote($articleNote);
  49. unset($articleNote);
  50. }
  51. $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO');
  52. $editAssignments =& $editAssignmentDao->getEditAssignmentsByUserId($oldUserId);
  53. while ($editAssignment =& $editAssignments->next()) {
  54. $editAssignment->setEditorId($newUserId);
  55. $editAssignmentDao->updateEditAssignment($editAssignment);
  56. unset($editAssignment);
  57. }
  58. $editorSubmissionDao =& DAORegistry::getDAO('EditorSubmissionDAO');
  59. $editorSubmissionDao->transferEditorDecisions($oldUserId, $newUserId);
  60. $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
  61. foreach ($reviewAssignmentDao->getReviewAssignmentsByUserId($oldUserId) as $reviewAssignment) {
  62. $reviewAssignment->setReviewerId($newUserId);
  63. $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
  64. unset($reviewAssignment);
  65. }
  66. $signoffDao =& DAORegistry::getDAO('SignoffDAO');
  67. $copyeditorSubmissionDao =& DAORegistry::getDAO('CopyeditorSubmissionDAO');
  68. $copyeditorSubmissions =& $copyeditorSubmissionDao->getCopyeditorSubmissionsByCopyeditorId($oldUserId);
  69. while ($copyeditorSubmission =& $copyeditorSubmissions->next()) {
  70. $initialCopyeditSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_INITIAL', ASSOC_TYPE_ARTICLE, $copyeditorSubmission->getArticleId());
  71. $finalCopyeditSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_FINAL', ASSOC_TYPE_ARTICLE, $copyeditorSubmission->getArticleId());
  72. $initialCopyeditSignoff->setUserId($newUserId);
  73. $finalCopyeditSignoff->setUserId($newUserId);
  74. $signoffDao->updateObject($initialCopyeditSignoff);
  75. $signoffDao->updateObject($finalCopyeditSignoff);
  76. unset($copyeditorSubmission);
  77. unset($initialCopyeditSignoff);
  78. unset($finalCopyeditSignoff);
  79. }
  80. $layoutEditorSubmissionDao =& DAORegistry::getDAO('LayoutEditorSubmissionDAO');
  81. $layoutEditorSubmissions =& $layoutEditorSubmissionDao->getSubmissions($oldUserId);
  82. while ($layoutEditorSubmission =& $layoutEditorSubmissions->next()) {
  83. $layoutSignoff = $signoffDao->build('SIGNOFF_LAYOUT', ASSOC_TYPE_ARTICLE, $layoutEditorSubmission->getArticleId());
  84. $layoutProofreadSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_LAYOUT', ASSOC_TYPE_ARTICLE, $layoutEditorSubmission->getArticleId());
  85. $layoutSignoff->setUserId($newUserId);
  86. $layoutProofreadSignoff->setUserId($newUserId);
  87. $signoffDao->updateObject($layoutSignoff);
  88. $signoffDao->updateObject($layoutProofreadSignoff);
  89. unset($layoutSignoff);
  90. unset($layoutProofreadSignoff);
  91. unset($layoutEditorSubmission);
  92. }
  93. $proofreaderSubmissionDao =& DAORegistry::getDAO('ProofreaderSubmissionDAO');
  94. $proofreaderSubmissions =& $proofreaderSubmissionDao->getSubmissions($oldUserId);
  95. while ($proofreaderSubmission =& $proofreaderSubmissions->next()) {
  96. $proofSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_PROOFREADER', ASSOC_TYPE_ARTICLE, $proofreaderSubmission->getArticleId());
  97. $proofSignoff->setUserId($newUserId);
  98. $signoffDao->updateObject($proofSignoff);
  99. unset($proofSignoff);
  100. unset($proofreaderSubmission);
  101. }
  102. $articleEmailLogDao =& DAORegistry::getDAO('ArticleEmailLogDAO');
  103. $articleEmailLogDao->transferArticleLogEntries($oldUserId, $newUserId);
  104. $articleEventLogDao =& DAORegistry::getDAO('ArticleEventLogDAO');
  105. $articleEventLogDao->transferArticleLogEntries($oldUserId, $newUserId);
  106. $articleCommentDao =& DAORegistry::getDAO('ArticleCommentDAO');
  107. foreach ($articleCommentDao->getArticleCommentsByUserId($oldUserId) as $articleComment) {
  108. $articleComment->setAuthorId($newUserId);
  109. $articleCommentDao->updateArticleComment($articleComment);
  110. unset($articleComment);
  111. }
  112. $accessKeyDao =& DAORegistry::getDAO('AccessKeyDAO');
  113. $accessKeyDao->transferAccessKeys($oldUserId, $newUserId);
  114. // Transfer old user's individual subscriptions for each journal if new user
  115. // does not have a valid individual subscription for a given journal.
  116. $individualSubscriptionDao =& DAORegistry::getDAO('IndividualSubscriptionDAO');
  117. $oldUserSubscriptions =& $individualSubscriptionDao->getSubscriptionsByUser($oldUserId);
  118. while ($oldUserSubscription =& $oldUserSubscriptions->next()) {
  119. $subscriptionJournalId = $oldUserSubscription->getJournalId();
  120. $oldUserValidSubscription = $individualSubscriptionDao->isValidIndividualSubscription($oldUserId, $subscriptionJournalId);
  121. if ($oldUserValidSubscription) {
  122. // Check if new user has a valid subscription for current journal
  123. $newUserSubscriptionId = $individualSubscriptionDao->getSubscriptionIdByUser($newUserId, $subscriptionJournalId);
  124. if (empty($newUserSubscriptionId)) {
  125. // New user does not have this subscription, transfer old user's
  126. $oldUserSubscription->setUserId($newUserId);
  127. $individualSubscriptionDao->updateSubscription($oldUserSubscription);
  128. } elseif (!$individualSubscriptionDao->isValidIndividualSubscription($newUserId, $subscriptionJournalId)) {
  129. // New user has a subscription but it's invalid. Delete it and
  130. // transfer old user's valid one
  131. $individualSubscriptionDao->deleteSubscriptionsByUserIdForJournal($newUserId, $subscriptionJournalId);
  132. $oldUserSubscription->setUserId($newUserId);
  133. $individualSubscriptionDao->updateSubscription($oldUserSubscription);
  134. }
  135. }
  136. }
  137. // Delete any remaining old user's subscriptions not transferred to new user
  138. $individualSubscriptionDao->deleteSubscriptionsByUserId($oldUserId);
  139. // Transfer all old user's institutional subscriptions for each journal to
  140. // new user. New user now becomes the contact person for these.
  141. $institutionalSubscriptionDao =& DAORegistry::getDAO('InstitutionalSubscriptionDAO');
  142. $oldUserSubscriptions =& $institutionalSubscriptionDao->getSubscriptionsByUser($oldUserId);
  143. while ($oldUserSubscription =& $oldUserSubscriptions->next()) {
  144. $oldUserSubscription->setUserId($newUserId);
  145. $institutionalSubscriptionDao->updateSubscription($oldUserSubscription);
  146. }
  147. // Delete the old user and associated info.
  148. $sessionDao =& DAORegistry::getDAO('SessionDAO');
  149. $sessionDao->deleteSessionsByUserId($oldUserId);
  150. $temporaryFileDao =& DAORegistry::getDAO('TemporaryFileDAO');
  151. $temporaryFileDao->deleteTemporaryFilesByUserId($oldUserId);
  152. $userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO');
  153. $userSettingsDao->deleteSettings($oldUserId);
  154. $groupMembershipDao =& DAORegistry::getDAO('GroupMembershipDAO');
  155. $groupMembershipDao->deleteMembershipByUserId($oldUserId);
  156. $sectionEditorsDao =& DAORegistry::getDAO('SectionEditorsDAO');
  157. $sectionEditorsDao->deleteEditorsByUserId($oldUserId);
  158. // Transfer old user's roles
  159. $roleDao =& DAORegistry::getDAO('RoleDAO');
  160. $userDao =& DAORegistry::getDAO('UserDAO');
  161. $roles =& $roleDao->getRolesByUserId($oldUserId);
  162. foreach ($roles as $role) {
  163. if (!$roleDao->roleExists($role->getJournalId(), $newUserId, $role->getRoleId())) {
  164. $role->setUserId($newUserId);
  165. $roleDao->insertRole($role);
  166. }
  167. }
  168. $roleDao->deleteRoleByUserId($oldUserId);
  169. $userDao->deleteUserById($oldUserId);
  170. return true;
  171. }
  172. }
  173. ?>