Open Journal Systems  3.3.0
PKPUserUserXmlFilter.inc.php
1 <?php
2 
16 import('lib.pkp.plugins.importexport.native.filter.NativeExportFilter');
17 
23  function __construct($filterGroup) {
24  $this->setDisplayName('User XML user export');
25  parent::__construct($filterGroup);
26  }
27 
28 
29  //
30  // Implement template methods from PersistableFilter
31  //
35  function getClassName() {
36  return 'lib.pkp.plugins.importexport.users.filter.PKPUserUserXmlFilter';
37  }
38 
39 
40  //
41  // Implement template methods from Filter
42  //
48  function &process(&$users) {
49  // Create the XML document
50  $doc = new DOMDocument('1.0');
51  $deployment = $this->getDeployment();
52 
53  $rootNode = $doc->createElementNS($deployment->getNamespace(), 'PKPUsers');
54  $this->addUserGroups($doc, $rootNode);
55 
56  // Multiple users; wrap in a <users> element
57  $usersNode = $doc->createElementNS($deployment->getNamespace(), 'users');
58  foreach ($users as $user) {
59  $usersNode->appendChild($this->createPKPUserNode($doc, $user));
60  }
61  $rootNode->appendChild($usersNode);
62  $doc->appendChild($rootNode);
63  $rootNode->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
64  $rootNode->setAttribute('xsi:schemaLocation', $deployment->getNamespace() . ' ' . $deployment->getSchemaFilename());
65 
66  return $doc;
67  }
68 
69  //
70  // PKPAuthor conversion functions
71  //
78  function createPKPUserNode($doc, $user) {
79  $deployment = $this->getDeployment();
80  $context = $deployment->getContext();
81 
82  // Create the user node
83  $userNode = $doc->createElementNS($deployment->getNamespace(), 'user');
84 
85  // Add metadata
86  $this->createLocalizedNodes($doc, $userNode, 'givenname', $user->getGivenName(null));
87  $this->createLocalizedNodes($doc, $userNode, 'familyname', $user->getFamilyName(null));
88  $this->createLocalizedNodes($doc, $userNode, 'affiliation', $user->getAffiliation(null));
89 
90  $this->createOptionalNode($doc, $userNode, 'country', $user->getCountry());
91  $userNode->appendChild($doc->createElementNS($deployment->getNamespace(), 'email', htmlspecialchars($user->getEmail(), ENT_COMPAT, 'UTF-8')));
92  $this->createOptionalNode($doc, $userNode, 'url', $user->getUrl());
93  $this->createOptionalNode($doc, $userNode, 'orcid', $user->getOrcid());
94  if (is_array($user->getBiography(null))) {
95  $this->createLocalizedNodes($doc, $userNode, 'biography', $user->getBiography(null));
96  }
97 
98  $userNode->appendChild($doc->createElementNS($deployment->getNamespace(), 'username', htmlspecialchars($user->getUsername(), ENT_COMPAT, 'UTF-8')));
99 
100  $this->createOptionalNode($doc, $userNode, 'gossip', $user->getGossip());
101 
102  if (is_array($user->getSignature(null))) {
103  $this->createLocalizedNodes($doc, $userNode, 'signature', $user->getSignature(null));
104  }
105 
106  $passwordNode = $doc->createElementNS($deployment->getNamespace(), 'password');
107  $passwordNode->setAttribute('is_disabled', $user->getDisabled() ? 'true' : 'false');
108  $passwordNode->setAttribute('must_change', $user->getMustChangePassword() ? 'true' : 'false');
109  $passwordNode->setAttribute('encryption', Config::getVar('security', 'encryption'));
110  $passwordNode->appendChild($doc->createElementNS($deployment->getNamespace(), 'value', htmlspecialchars($user->getPassword(), ENT_COMPAT, 'UTF-8')));
111 
112  $userNode->appendChild($passwordNode);
113 
114  $this->createOptionalNode($doc, $userNode, 'date_registered', $user->getDateRegistered());
115  $this->createOptionalNode($doc, $userNode, 'date_last_login', $user->getDateLastLogin());
116  $this->createOptionalNode($doc, $userNode, 'date_last_email', $user->getDateLastEmail());
117  $this->createOptionalNode($doc, $userNode, 'date_validated', $user->getDateValidated());
118  $this->createOptionalNode($doc, $userNode, 'inline_help', $user->getInlineHelp() ? 'true' : 'false');
119  $this->createOptionalNode($doc, $userNode, 'auth_id', $user->getAuthId());
120  $this->createOptionalNode($doc, $userNode, 'auth_string', $user->getAuthStr());
121  $this->createOptionalNode($doc, $userNode, 'phone', $user->getPhone());
122  $this->createOptionalNode($doc, $userNode, 'mailing_address', $user->getMailingAddress());
123  $this->createOptionalNode($doc, $userNode, 'billing_address', $user->getBillingAddress());
124  $this->createOptionalNode($doc, $userNode, 'locales', join(':',$user->getLocales()));
125  if ($user->getDisabled()) {
126  $this->createOptionalNode($doc, $userNode, 'disabled_reason', $user->getDisabledReason());
127  }
128 
129  $userGroupAssignmentDao = DAORegistry::getDAO('UserGroupAssignmentDAO'); /* @var $userGroupAssignmentDao UserGroupAssignmentDAO */
130  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
131  $assignedGroups = $userGroupAssignmentDao->getByUserId($user->getId(), $context->getId());
132  while ($assignedGroup = $assignedGroups->next()) {
133  $userGroup = $userGroupDao->getById($assignedGroup->getUserGroupId());
134  if ($userGroup) {
135  $userNode->appendChild($doc->createElementNS($deployment->getNamespace(), 'user_group_ref', htmlspecialchars($userGroup->getName($context->getPrimaryLocale()), ENT_COMPAT, 'UTF-8')));
136  }
137  }
138 
139  // Add Reviewing Interests, if any.
140  import('lib.pkp.classes.user.InterestManager');
141  $interestManager = new InterestManager();
142  $interests = $interestManager->getInterestsString($user);
143  $this->createOptionalNode($doc, $userNode, 'review_interests', $interests);
144 
145  return $userNode;
146  }
147 
148  function addUserGroups($doc, $rootNode) {
149  $deployment = $this->getDeployment();
150  $context = $deployment->getContext();
151  $userGroupsNode = $doc->createElementNS($deployment->getNamespace(), 'user_groups');
152 
153  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
154  $userGroups = $userGroupDao->getByContextId($context->getId());
155  $filterDao = DAORegistry::getDAO('FilterDAO'); /* @var $filterDao FilterDAO */
156  $userGroupExportFilters = $filterDao->getObjectsByGroup('usergroup=>user-xml');
157  assert(count($userGroupExportFilters)==1); // Assert only a single serialization filter
158  $exportFilter = array_shift($userGroupExportFilters);
159  $exportFilter->setDeployment($this->getDeployment());
160 
161  $userGroupsArray = $userGroups->toArray();
162  $userGroupsDoc = $exportFilter->execute($userGroupsArray);
163  if ($userGroupsDoc->documentElement instanceof DOMElement) {
164  $clone = $doc->importNode($userGroupsDoc->documentElement, true);
165  $rootNode->appendChild($clone);
166  }
167  }
168 }
169 
170 
NativeExportFilter\createOptionalNode
createOptionalNode($doc, $parentNode, $name, $value)
Definition: NativeExportFilter.inc.php:106
PKPUserUserXmlFilter\process
& process(&$users)
Definition: PKPUserUserXmlFilter.inc.php:48
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPUserUserXmlFilter\createPKPUserNode
createPKPUserNode($doc, $user)
Definition: PKPUserUserXmlFilter.inc.php:78
NativeImportExportFilter\getDeployment
getDeployment()
Definition: NativeImportExportFilter.inc.php:49
PKPUserUserXmlFilter\addUserGroups
addUserGroups($doc, $rootNode)
Definition: PKPUserUserXmlFilter.inc.php:148
NativeExportFilter\createLocalizedNodes
createLocalizedNodes($doc, $parentNode, $name, $values)
Definition: NativeExportFilter.inc.php:87
NativeExportFilter
Base class that converts a DataObject to a Native XML document.
Definition: NativeExportFilter.inc.php:18
Config\getVar
static getVar($section, $key, $default=null)
Definition: Config.inc.php:35
PKPUserUserXmlFilter\__construct
__construct($filterGroup)
Definition: PKPUserUserXmlFilter.inc.php:23
InterestManager
Handle user interest functions.
Definition: InterestManager.inc.php:16
PKPUserUserXmlFilter
Base class that converts a set of users to a User XML document.
Definition: PKPUserUserXmlFilter.inc.php:18
PKPUserUserXmlFilter\getClassName
getClassName()
Definition: PKPUserUserXmlFilter.inc.php:35
Filter\setDisplayName
setDisplayName($displayName)
Definition: Filter.inc.php:140