16 import(
'lib.pkp.classes.cliTool.CliTool');
31 parent::__construct(
$argv);
33 if (!isset($this->argv[0]) || !isset($this->argv[1]) ) {
38 $this->targetSpecifier = $this->argv[0];
39 $this->mergeSpecifiers = array_slice($this->argv, 1);
46 echo
"Merge users tool\n"
47 .
"Use this tool to merge two or more user accounts.\n\n"
48 .
"Usage: {$this->scriptName} targetUsername mergeUsername1 [mergeUsername2] [...]\n"
49 .
"targetUsername: The target username for assets to be transferred to.\n"
50 .
"mergeUsername1: The username for the account to be merged. All assets (e.g.\n"
51 .
" submissions) associated with this user account will be\n"
52 .
" transferred to the user account that corresponds to\n"
53 .
" targetUsernameusername1. The user account that corresponds\n"
54 .
" to username2 will be deleted.\n\n"
55 .
"Multiple users to merge can be specified in the same command, e.g.:\n\n"
56 .
"{$this->scriptName} myUsername spamUser1 spamUser2 spamUser3\n\n"
57 .
"This will merge users with username \"spamUser1\", \"spamUser2\", and\n"
58 .
"\"spamUser3\" into the account with username \"myUsername\".\n\n"
59 .
"Users can be specified by ID by entering usernames of the form \"id=x\"\n"
60 .
"with the username in place of \"x\", e.g.:\n\n"
61 .
"{$this->scriptName} myUsername id=234 id=456\n\n"
62 .
"Usernames and IDs may be mixed as desired.\n";
72 echo
"Error: \"$this->targetSpecifier\" does not specify a valid user.\n";
77 $mergeArray = array();
78 foreach ($this->mergeSpecifiers as $specifier) {
81 echo
"Error: \"$specifier\" does not specify a valid user.\n";
84 if ($mergeUser->getId() == $targetUser->getId()) {
85 echo
"Error: Cannot merge an account into itself.\n";
88 $mergeArray[$mergeUser->getId()] = $mergeUser->getUsername();
92 import(
'classes.user.UserAction');
94 foreach ($mergeArray as $userId => $username) {
95 $userAction->mergeUsers($userId, $targetUser->getId());
98 if (count($mergeArray) == 1) {
99 echo
"Merge completed: \"$username\" merged into \"" . $targetUser->getUsername() .
"\".\n";
101 echo
'Merge completed: ' . count($mergeArray) .
" users merged into \"" . $targetUser->getUsername() .
"\".\n";
112 if (substr($specifier, 0, 3) ==
'id=') {
113 return $userDao->getById(substr($specifier, 3));
115 return $userDao->getByUsername($specifier);