16 import(
'lib.pkp.plugins.importexport.native.filter.NativeImportFilter');
25 parent::__construct($filterGroup);
46 return 'lib.pkp.plugins.importexport.users.filter.UserXmlPKPUserFilter';
57 $importFilters = $filterDao->getObjectsByGroup(
'user-xml=>usergroup');
58 assert(count($importFilters)==1);
59 $importFilter = array_shift($importFilters);
61 $userGroupDoc =
new DOMDocument();
62 $userGroupDoc->appendChild($userGroupDoc->importNode($node,
true));
63 return $importFilter->execute($userGroupDoc);
73 $context = $deployment->getContext();
74 $site = $deployment->getSite();
78 $user = $userDao->newDataObject();
84 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling)
if (is_a($n,
'DOMElement'))
switch($n->tagName) {
85 case 'username': $user->setUsername($n->textContent);
break;
87 $locale = $n->getAttribute(
'locale');
88 if (empty($locale)) $locale = $site->getPrimaryLocale();
89 $user->setGivenName($n->textContent, $locale);
92 $locale = $n->getAttribute(
'locale');
93 if (empty($locale)) $locale = $site->getPrimaryLocale();
94 $user->setFamilyName($n->textContent, $locale);
97 $locale = $n->getAttribute(
'locale');
98 if (empty($locale)) $locale = $site->getPrimaryLocale();
99 $user->setAffiliation($n->textContent, $locale);
101 case 'country': $user->setCountry($n->textContent);
break;
102 case 'email': $user->setEmail($n->textContent);
break;
103 case 'url': $user->setUrl($n->textContent);
break;
104 case 'orcid': $user->setOrcid($n->textContent);
break;
105 case 'phone': $user->setPhone($n->textContent);
break;
106 case 'billing_address': $user->setBillingAddress($n->textContent);
break;
107 case 'mailing_address': $user->setMailingAddress($n->textContent);
break;
109 $locale = $n->getAttribute(
'locale');
110 if (empty($locale)) $locale = $site->getPrimaryLocale();
111 $user->setBiography($n->textContent, $locale);
113 case 'gossip': $user->setGossip($n->textContent);
break;
115 $locale = $n->getAttribute(
'locale');
116 if (empty($locale)) $locale = $site->getPrimaryLocale();
117 $user->setSignature($n->textContent, $locale);
119 case 'date_registered': $user->setDateRegistered($n->textContent);
break;
120 case 'date_last_login': $user->setDateLastLogin($n->textContent);
break;
121 case 'date_last_email': $user->setDateLastEmail($n->textContent);
break;
122 case 'date_validated': $user->setDateValidated($n->textContent);
break;
123 case 'inline_help':$n->textContent ==
'true' ? $user->setInlineHelp(
true) : $user->setInlineHelp(
false) ;
break;
124 case 'auth_id': $user->setAuthId($n->textContent);
break;
125 case 'auth_string': $user->setAuthString($n->textContent);
break;
126 case 'disabled_reason': $user->setDisabledReason($n->textContent);
break;
127 case 'locales': $user->setLocales(preg_split(
'/:/', $n->textContent));
break;
129 if ($n->getAttribute(
'must_change') ==
'true') {
130 $user->setMustChangePassword(
true);
133 if ($n->getAttribute(
'is_disabled') ==
'true') {
134 $user->setDisabled(
true);
137 if ($n->getAttribute(
'encryption')) {
138 $encryption = $n->getAttribute(
'encryption');
141 $passwordValueNodeList = $n->getElementsByTagNameNS($deployment->getNamespace(),
'value');
142 if ($passwordValueNodeList->length == 1) {
143 $password = $passwordValueNodeList->item(0);
144 $user->setPassword($password->textContent);
146 $this->
addError(__(
'plugins.importexport.user.error.userHasNoPassword', array(
'username' => $user->getUsername())));
155 $userByUsername = $userDao->getByUsername($user->getUsername(),
true);
156 $userByEmail = $userDao->getUserByEmail($user->getEmail(),
true);
159 if ($userByUsername && $userByEmail && $userByUsername->getId() == $userByEmail->getId()) {
160 $user = $userByUsername;
161 $userId = $user->getId();
162 } elseif (!$userByUsername && !$userByEmail) {
165 if (empty($user->getGivenName($site->getPrimaryLocale()))) {
167 $userGivenNames = $user->getGivenName(
null);
168 $userFamilyNames = $user->getFamilyName(
null);
169 $userAffiliations = $user->getAffiliation(
null);
171 $notEmptyGivenNames = $notEmptyFamilyNames = $notEmptyAffiliations = array();
172 $notEmptyGivenNames = array_filter($userGivenNames,
function($a) {
176 if (empty($notEmptyGivenNames)) {
179 if (!empty($userFamilyNames)) {
180 $notEmptyFamilyNames = array_filter($userFamilyNames,
function($a) {
184 if (!empty($userAffiliations)) {
185 $notEmptyAffiliations = array_filter($userAffiliations,
function($a) {
190 $commonLocales = array_intersect_key($notEmptyGivenNames, $notEmptyFamilyNames);
191 if (empty($commonLocales)) {
193 $firstLocale = reset(array_keys($notEmptyGivenNames));
194 $user->setGivenName($notEmptyGivenNames[$firstLocale], $site->getPrimaryLocale());
197 $firstLocale = reset(array_keys($commonLocales));
199 $affiliationCommonLocales = array_intersect_key($notEmptyAffiliations, $commonLocales);
200 if (!empty($affiliationCommonLocales)) {
202 $firstLocale = reset(array_keys($affiliationCommonLocales));
204 if (empty($notEmptyAffiliations[$site->getPrimaryLocale()])) {
205 $user->setAffiliation($notEmptyAffiliations[$firstLocale], $site->getPrimaryLocale());
209 $user->setGivenName($notEmptyGivenNames[$firstLocale], $site->getPrimaryLocale());
210 if (empty($notEmptyFamilyNames[$site->getPrimaryLocale()])) {
211 $user->setFamilyName($notEmptyFamilyNames[$firstLocale], $site->getPrimaryLocale());
215 $userId = $userDao->insertObject($user);
218 $interestNodeList = $node->getElementsByTagNameNS($deployment->getNamespace(),
'review_interests');
219 if ($interestNodeList->length == 1) {
220 $n = $interestNodeList->item(0);
222 $interests = preg_split(
'/,\s*/', $n->textContent);
223 import(
'lib.pkp.classes.user.InterestManager');
225 $interestManager->setInterestsForUser($user, $interests);
232 import(
'lib.pkp.classes.mail.MailTemplate');
234 $mail->setReplyTo($context->getSetting(
'contactEmail'), $context->getSetting(
'contactName'));
235 $mail->assignParams(array(
'username' => $user->getUsername(),
'password' => $password,
'userFullName' => $user->getFullName()));
236 $mail->addRecipient($user->getEmail(), $user->getFullName());
241 $this->
addError(__(
'plugins.importexport.user.error.usernameEmailMismatch', array(
'username' => $user->getUsername(),
'email' => $user->getEmail())));
247 $userGroupsFactory = $userGroupDao->getByContextId($context->getId());
248 $userGroups = $userGroupsFactory->toArray();
253 $userGroupNodeList = $node->getElementsByTagNameNS($deployment->getNamespace(),
'user_group_ref');
254 if ($userGroupNodeList->length > 0) {
255 for ($i = 0 ; $i < $userGroupNodeList->length ; $i++) {
256 $n = $userGroupNodeList->item($i);
257 foreach ($userGroups as $userGroup) {
258 if (in_array($n->textContent, $userGroup->getName(
null))) {
260 $userGroupDao->assignUserToGroup($userId, $userGroup->getId());
276 $context = $deployment->getContext();
278 for ($n = $node->firstChild; $n !==
null; $n=$n->nextSibling) {
279 if (is_a($n,
'DOMElement')) {
291 switch ($n->tagName) {
310 $passwordHash = $userToImport->getPassword();
314 $site = $siteDao->getSite();
315 if (strlen($passwordHash) >= $site->getMinPasswordLength()) {
318 $this->
addError(__(
'plugins.importexport.user.error.plainPasswordNotValid', array(
'username' => $userToImport->getUsername())));
321 if (password_needs_rehash($passwordHash, PASSWORD_BCRYPT)) {
326 $userToImport->setMustChangePassword(
true);
328 $this->
addError(__(
'plugins.importexport.user.error.passwordHasBeenChanged', array(
'username' => $userToImport->getUsername())));
330 $userToImport->setPassword($passwordHash);