Open Journal Systems  3.3.0
PKPUserImportExportPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.classes.plugins.ImportExportPlugin');
17 
19 
23  function register($category, $path, $mainContextId = null) {
24  $success = parent::register($category, $path, $mainContextId);
25  $this->addLocaleData();
26  import('lib.pkp.' . str_replace('/', '.', $this->getPluginPath()) . '.PKPUserImportExportDeployment');
27  return $success;
28  }
29 
35  function getName() {
36  return 'UserImportExportPlugin';
37  }
38 
43  function getDisplayName() {
44  return __('plugins.importexport.users.displayName');
45  }
46 
51  function getDescription() {
52  return __('plugins.importexport.users.description');
53  }
54 
59  return 'users';
60  }
61 
67  function display($args, $request) {
68  $templateMgr = TemplateManager::getManager($request);
69  $context = $request->getContext();
70 
71  parent::display($args, $request);
72 
73  $templateMgr->assign('plugin', $this);
74 
75  switch (array_shift($args)) {
76  case 'index':
77  case '':
78  $templateMgr->display($this->getTemplateResource('index.tpl'));
79  break;
80  case 'uploadImportXML':
81  $user = $request->getUser();
82  import('lib.pkp.classes.file.TemporaryFileManager');
83  $temporaryFileManager = new TemporaryFileManager();
84  $temporaryFile = $temporaryFileManager->handleUpload('uploadedFile', $user->getId());
85  if ($temporaryFile) {
86  $json = new JSONMessage(true);
87  $json->setAdditionalAttributes(array(
88  'temporaryFileId' => $temporaryFile->getId()
89  ));
90  } else {
91  $json = new JSONMessage(false, __('common.uploadFailed'));
92  }
93 
94  header('Content-Type: application/json');
95  return $json->getString();
96  case 'importBounce':
97  $json = new JSONMessage(true);
98  $json->setEvent('addTab', array(
99  'title' => __('plugins.importexport.users.results'),
100  'url' => $request->url(null, null, null, array('plugin', $this->getName(), 'import'), array('temporaryFileId' => $request->getUserVar('temporaryFileId'))),
101  ));
102  header('Content-Type: application/json');
103  return $json->getString();
104  case 'import':
105  $temporaryFileId = $request->getUserVar('temporaryFileId');
106  $temporaryFileDao = DAORegistry::getDAO('TemporaryFileDAO'); /* @var $temporaryFileDao TemporaryFileDAO */
107  $user = $request->getUser();
108  $temporaryFile = $temporaryFileDao->getTemporaryFile($temporaryFileId, $user->getId());
109  if (!$temporaryFile) {
110  $json = new JSONMessage(true, __('plugins.importexport.users.uploadFile'));
111  header('Content-Type: application/json');
112  return $json->getString();
113  }
114  $temporaryFilePath = $temporaryFile->getFilePath();
115  libxml_use_internal_errors(true);
116 
117  $filter = $this->getUserImportExportFilter($context, $user);
118  $users = $this->importUsers(file_get_contents($temporaryFilePath), $context, $user, $filter);
119  $validationErrors = array_filter(libxml_get_errors(), function($a) {
120  return $a->level == LIBXML_ERR_ERROR || $a->level == LIBXML_ERR_FATAL;
121  });
122  $templateMgr->assign('validationErrors', $validationErrors);
123  libxml_clear_errors();
124  if ($filter->hasErrors()) {
125  $templateMgr->assign('filterErrors', $filter->getErrors());
126  }
127  $templateMgr->assign('users', $users);
128  $json = new JSONMessage(true, $templateMgr->fetch($this->getTemplateResource('results.tpl')));
129  header('Content-Type: application/json');
130  return $json->getString();
131  case 'export':
132  $filter = $this->getUserImportExportFilter($request->getContext(), $request->getUser(), false);
133 
134  $exportXml = $this->exportUsers(
135  (array) $request->getUserVar('selectedUsers'),
136  $request->getContext(),
137  $request->getUser(),
138  $filter
139  );
140  import('lib.pkp.classes.file.FileManager');
141  $fileManager = new FileManager();
142  $exportFileName = $this->getExportFileName($this->getExportPath(), 'users', $context, '.xml');
143  $fileManager->writeFile($exportFileName, $exportXml);
144  $fileManager->downloadByPath($exportFileName);
145  $fileManager->deleteByPath($exportFileName);
146  break;
147  case 'exportAllUsers':
148  $filter = $this->getUserImportExportFilter($request->getContext(), $request->getUser(), false);
149 
150  $exportXml = $this->exportAllUsers(
151  $request->getContext(),
152  $request->getUser(),
153  $filter
154  );
155  import('lib.pkp.classes.file.FileManager');
156  $fileManager = new FileManager();
157  $exportFileName = $this->getExportFileName($this->getExportPath(), 'users', $context, '.xml');
158  $fileManager->writeFile($exportFileName, $exportXml);
159  $fileManager->downloadByPath($exportFileName);
160  $fileManager->deleteByPath($exportFileName);
161  break;
162  default:
163  $dispatcher = $request->getDispatcher();
164  $dispatcher->handle404();
165  }
166  }
167 
175  function exportAllUsers($context, $user, &$filter = null) {
176  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
177  $users = $userGroupDao->getUsersByContextId($context->getId());
178  if (!$filter) {
179  $filter = $this->getUserImportExportFilter($context, $user, false);
180  }
181 
182  return $this->exportUsers($users->toArray(), $context, $user, $filter);
183  }
184 
193  function exportUsers($ids, $context, $user, &$filter = null) {
194  $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */
195  $xml = '';
196 
197  if (!$filter) {
198  $filter = $this->getUserImportExportFilter($context, $user, false);
199  }
200 
201  $users = array();
202  foreach ($ids as $id) {
203  if (is_a($id, 'User')) {
204  $users[] = $id;
205  } else {
206  $user = $userDao->getById($id, $context->getId());
207  if ($user) $users[] = $user;
208  }
209  }
210 
211 
212  $userXml = $filter->execute($users);
213  if ($userXml) $xml = $userXml->saveXml();
214  else fatalError('Could not convert users.');
215  return $xml;
216  }
217 
226  function importUsers($importXml, $context, $user, &$filter = null) {
227  if (!$filter) {
228  $filter = $this->getUserImportExportFilter($context, $user);
229  }
230 
231  return $filter->execute($importXml);
232  }
233 
241  function getUserImportExportFilter($context, $user, $isImport = true) {
242  $filterDao = DAORegistry::getDAO('FilterDAO'); /* @var $filterDao FilterDAO */
243 
244  if ($isImport) {
245  $userFilters = $filterDao->getObjectsByGroup('user-xml=>user');
246  } else {
247  $userFilters = $filterDao->getObjectsByGroup('user=>user-xml');
248  }
249 
250  assert(count($userFilters) == 1); // Assert only a single unserialization filter
251  $filter = array_shift($userFilters);
252  $filter->setDeployment(new PKPUserImportExportDeployment($context, $user));
253 
254  return $filter;
255  }
256 }
257 
258 
TemporaryFileManager
Definition: TemporaryFileManager.inc.php:19
PKPUserImportExportPlugin
Definition: PKPUserImportExportPlugin.inc.php:18
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPUserImportExportPlugin\exportUsers
exportUsers($ids, $context, $user, &$filter=null)
Definition: PKPUserImportExportPlugin.inc.php:193
PKPUserImportExportPlugin\getDescription
getDescription()
Definition: PKPUserImportExportPlugin.inc.php:51
PKPUserImportExportPlugin\getName
getName()
Definition: PKPUserImportExportPlugin.inc.php:35
ImportExportPlugin
Abstract class for import/export plugins.
Definition: ImportExportPlugin.inc.php:18
ImportExportPlugin\getExportFileName
getExportFileName($basePath, $objectsFileNamePart, $context, $extension='.xml')
Definition: ImportExportPlugin.inc.php:152
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
ImportExportPlugin\getExportPath
getExportPath()
Definition: ImportExportPlugin.inc.php:140
PKPUserImportExportPlugin\getUserImportExportFilter
getUserImportExportFilter($context, $user, $isImport=true)
Definition: PKPUserImportExportPlugin.inc.php:241
PKPUserImportExportPlugin\getDisplayName
getDisplayName()
Definition: PKPUserImportExportPlugin.inc.php:43
PKPUserImportExportPlugin\getPluginSettingsPrefix
getPluginSettingsPrefix()
Definition: PKPUserImportExportPlugin.inc.php:58
PKPUserImportExportPlugin\exportAllUsers
exportAllUsers($context, $user, &$filter=null)
Definition: PKPUserImportExportPlugin.inc.php:175
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
PKPUserImportExportPlugin\display
display($args, $request)
Definition: PKPUserImportExportPlugin.inc.php:67
Plugin\getTemplateResource
getTemplateResource($template=null, $inCore=false)
Definition: Plugin.inc.php:349
Plugin\getPluginPath
getPluginPath()
Definition: Plugin.inc.php:330
Plugin\$request
$request
Definition: Plugin.inc.php:68
Plugin\addLocaleData
addLocaleData($locale=null)
Definition: Plugin.inc.php:454
PKPUserImportExportPlugin\importUsers
importUsers($importXml, $context, $user, &$filter=null)
Definition: PKPUserImportExportPlugin.inc.php:226
PKPUserImportExportDeployment
Class configuring the user import/export process to this application's specifics.
Definition: PKPUserImportExportDeployment.inc.php:19
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
FileManager
Class defining basic operations for file management.
Definition: FileManager.inc.php:35