Open Monograph Press  3.3.0
PKPUserAction.inc.php
1 <?php
2 
23  public function mergeUsers($oldUserId, $newUserId) {
24  // Need both user ids for merge
25  if (empty($oldUserId) || empty($newUserId)) {
26  return false;
27  }
28 
29  HookRegistry::call('UserAction::mergeUsers', array(&$oldUserId, &$newUserId));
30 
31  $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */
32  $submissionFileDao->transferOwnership($oldUserId, $newUserId);
33 
34  $noteDao = DAORegistry::getDAO('NoteDAO'); /* @var $noteDao NoteDAO */
35  $notes = $noteDao->getByUserId($oldUserId);
36  while ($note = $notes->next()) {
37  $note->setUserId($newUserId);
38  $noteDao->updateObject($note);
39  }
40 
41  $editDecisionDao = DAORegistry::getDAO('EditDecisionDAO'); /* @var $editDecisionDao EditDecisionDAO */
42  $editDecisionDao->transferEditorDecisions($oldUserId, $newUserId);
43 
44  $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */
45  foreach ($reviewAssignmentDao->getByUserId($oldUserId) as $reviewAssignment) {
46  $reviewAssignment->setReviewerId($newUserId);
47  $reviewAssignmentDao->updateObject($reviewAssignment);
48  }
49 
50  $submissionEmailLogDao = DAORegistry::getDAO('SubmissionEmailLogDAO'); /* @var $submissionEmailLogDao SubmissionEmailLogDAO */
51  $submissionEmailLogDao->changeUser($oldUserId, $newUserId);
52  $submissionEventLogDao = DAORegistry::getDAO('SubmissionEventLogDAO'); /* @var $submissionEventLogDao SubmissionEventLogDAO */
53  $submissionEventLogDao->changeUser($oldUserId, $newUserId);
54 
55  $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO'); /* @var $submissionCommentDao SubmissionCommentDAO */
56  $submissionComments = $submissionCommentDao->getByUserId($oldUserId);
57 
58  while ($submissionComment = $submissionComments->next()) {
59  $submissionComment->setAuthorId($newUserId);
60  $submissionCommentDao->updateObject($submissionComment);
61  }
62 
63  $accessKeyDao = DAORegistry::getDAO('AccessKeyDAO'); /* @var $accessKeyDao AccessKeyDAO */
64  $accessKeyDao->transferAccessKeys($oldUserId, $newUserId);
65 
66  $notificationDao = DAORegistry::getDAO('NotificationDAO'); /* @var $notificationDao NotificationDAO */
67  $notificationDao->transferNotifications($oldUserId, $newUserId);
68 
69  // Delete the old user and associated info.
70  $sessionDao = DAORegistry::getDAO('SessionDAO'); /* @var $sessionDao SessionDAO */
71  $sessionDao->deleteByUserId($oldUserId);
72  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
73  $temporaryFileDao->deleteByUserId($oldUserId);
74  $userSettingsDao = DAORegistry::getDAO('UserSettingsDAO'); /* @var $userSettingsDao UserSettingsDAO */
75  $userSettingsDao->deleteSettings($oldUserId);
76  $subEditorsDao = DAORegistry::getDAO('SubEditorsDAO'); /* @var $subEditorsDao SubEditorsDAO */
77  $subEditorsDao->deleteByUserId($oldUserId);
78 
79  // Transfer old user's roles
80  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
81  $userGroups = $userGroupDao->getByUserId($oldUserId);
82  while(!$userGroups->eof()) {
83  $userGroup = $userGroups->next();
84  if (!$userGroupDao->userInGroup($newUserId, $userGroup->getId())) {
85  $userGroupDao->assignUserToGroup($newUserId, $userGroup->getId());
86  }
87  }
88  $userGroupDao->deleteAssignmentsByUserId($oldUserId);
89 
90  // Transfer stage assignments.
91  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); /* @var $stageAssignmentDao StageAssignmentDAO */
92  $stageAssignments = $stageAssignmentDao->getByUserId($oldUserId);
93  while ($stageAssignment = $stageAssignments->next()) {
94  $duplicateAssignments = $stageAssignmentDao->getBySubmissionAndStageId($stageAssignment->getSubmissionId(), null, $stageAssignment->getUserGroupId(), $newUserId);
95  if (!$duplicateAssignments->next()) {
96  // If no similar assignments already exist, transfer this one.
97  $stageAssignment->setUserId($newUserId);
98  $stageAssignmentDao->updateObject($stageAssignment);
99  } else {
100  // There's already a stage assignment for the new user; delete.
101  $stageAssignmentDao->deleteObject($stageAssignment);
102  }
103  }
104 
105  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
106  $userDao->deleteUserById($oldUserId);
107 
108  return true;
109  }
110 }
111 
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPUserAction
PKPUserAction class.
Definition: PKPUserAction.inc.php:17
PKPUserAction\mergeUsers
mergeUsers($oldUserId, $newUserId)
Definition: PKPUserAction.inc.php:23
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86