00001 <?php
00002
00015
00016
00017
00018 import('classes.plugins.ImportExportPlugin');
00019
00020 import('xml.XMLCustomWriter');
00021
00022 class UserImportExportPlugin extends ImportExportPlugin {
00029 function register($category, $path) {
00030 $success = parent::register($category, $path);
00031 $this->addLocaleData();
00032 return $success;
00033 }
00034
00040 function getName() {
00041 return 'UserImportExportPlugin';
00042 }
00043
00044 function getDisplayName() {
00045 return Locale::translate('plugins.importexport.users.displayName');
00046 }
00047
00048 function getDescription() {
00049 return Locale::translate('plugins.importexport.users.description');
00050 }
00051
00052 function display(&$args) {
00053 $templateMgr = &TemplateManager::getManager();
00054 parent::display($args);
00055
00056 $templateMgr->assign('roleOptions', array(
00057 '' => 'manager.people.doNotEnroll',
00058 'manager' => 'user.role.manager',
00059 'editor' => 'user.role.editor',
00060 'sectionEditor' => 'user.role.sectionEditor',
00061 'layoutEditor' => 'user.role.layoutEditor',
00062 'reviewer' => 'user.role.reviewer',
00063 'copyeditor' => 'user.role.copyeditor',
00064 'proofreader' => 'user.role.proofreader',
00065 'author' => 'user.role.author',
00066 'reader' => 'user.role.reader',
00067 'subscriptionManager' => 'user.role.subscriptionManager'
00068 ));
00069
00070 $roleDao = &DAORegistry::getDAO('RoleDAO');
00071
00072 $journal = &Request::getJournal();
00073 switch (array_shift($args)) {
00074 case 'confirm':
00075 $this->import('UserXMLParser');
00076 $templateMgr->assign('helpTopicId', 'journal.users.importUsers');
00077
00078 $sendNotify = (bool) Request::getUserVar('sendNotify');
00079 $continueOnError = (bool) Request::getUserVar('continueOnError');
00080
00081 import('file.FileManager');
00082 if (($userFile = FileManager::getUploadedFilePath('userFile')) !== false) {
00083
00084 $parser = &new UserXMLParser($journal->getJournalId());
00085 $users = &$parser->parseData($userFile);
00086
00087 $i = 0;
00088 $usersRoles = array();
00089 foreach ($users as $user) {
00090 $usersRoles[$i] = array();
00091 foreach ($user->getRoles() as $role) {
00092 array_push($usersRoles[$i], $role->getRoleName());
00093 }
00094 $i++;
00095 }
00096
00097 $templateMgr->assign_by_ref('users', $users);
00098 $templateMgr->assign_by_ref('usersRoles', $usersRoles);
00099 $templateMgr->assign('sendNotify', $sendNotify);
00100 $templateMgr->assign('continueOnError', $continueOnError);
00101 $templateMgr->assign('errors', $parser->errors);
00102
00103
00104 $templateMgr->display($this->getTemplatePath() . 'importUsersConfirm.tpl');
00105 }
00106 break;
00107 case 'import':
00108 $this->import('UserXMLParser');
00109 $userKeys = Request::getUserVar('userKeys');
00110 if (!is_array($userKeys)) $userKeys = array();
00111 $sendNotify = (bool) Request::getUserVar('sendNotify');
00112 $continueOnError = (bool) Request::getUserVar('continueOnError');
00113
00114 $users = array();
00115 foreach ($userKeys as $i) {
00116 $newUser = &new ImportedUser();
00117 $newUser->setFirstName(Request::getUserVar($i.'_firstName'));
00118 $newUser->setMiddleName(Request::getUserVar($i.'_middleName'));
00119 $newUser->setLastName(Request::getUserVar($i.'_lastName'));
00120 $newUser->setUsername(Request::getUserVar($i.'_username'));
00121 $newUser->setEmail(Request::getUserVar($i.'_email'));
00122
00123 $locales = array();
00124 if (Request::getUserVar($i.'_locales') != null || is_array(Request::getUserVar($i.'_locales'))) {
00125 foreach (Request::getUserVar($i.'_locales') as $locale) {
00126 array_push($locales, $locale);
00127 }
00128 }
00129 $newUser->setLocales($locales);
00130 $newUser->setSignature(Request::getUserVar($i.'_signature'), null);
00131 $newUser->setBiography(Request::getUserVar($i.'_biography'), null);
00132 $newUser->setInterests(Request::getUserVar($i.'_interests'), null);
00133 $newUser->setCountry(Request::getUserVar($i.'_country'));
00134 $newUser->setMailingAddress(Request::getUserVar($i.'_mailingAddress'));
00135 $newUser->setFax(Request::getUserVar($i.'_fax'));
00136 $newUser->setPhone(Request::getUserVar($i.'_phone'));
00137 $newUser->setUrl(Request::getUserVar($i.'_url'));
00138 $newUser->setAffiliation(Request::getUserVar($i.'_affiliation'));
00139 $newUser->setGender(Request::getUserVar($i.'_gender'));
00140 $newUser->setInitials(Request::getUserVar($i.'_initials'));
00141 $newUser->setSalutation(Request::getUserVar($i.'_salutation'));
00142 $newUser->setPassword(Request::getUserVar($i.'_password'));
00143 $newUser->setMustChangePassword(Request::getUserVar($i.'_mustChangePassword'));
00144 $newUser->setUnencryptedPassword(Request::getUserVar($i.'_unencryptedPassword'));
00145
00146 $newUserRoles = Request::getUserVar($i.'_roles');
00147 if (is_array($newUserRoles) && count($newUserRoles) > 0) {
00148 foreach ($newUserRoles as $newUserRole) {
00149 if ($newUserRole != '') {
00150 $role = &new Role();
00151 $role->setRoleId(RoleDAO::getRoleIdFromPath($newUserRole));
00152 $newUser->AddRole($role);
00153 }
00154 }
00155 }
00156 array_push($users, $newUser);
00157 }
00158
00159 $parser = &new UserXMLParser($journal->getJournalId());
00160 $parser->setUsersToImport($users);
00161 if (!$parser->importUsers($sendNotify, $continueOnError)) {
00162
00163 $templateMgr->assign('isError', true);
00164 $templateMgr->assign('errors', $parser->getErrors());
00165 }
00166 $templateMgr->assign('importedUsers', $parser->getImportedUsers());
00167 $templateMgr->display($this->getTemplatePath() . 'importUsersResults.tpl');
00168 break;
00169 case 'exportAll':
00170 $this->import('UserExportDom');
00171 $users = &$roleDao->getUsersByJournalId($journal->getJournalId());
00172 $users = &$users->toArray();
00173 $doc = &UserExportDom::exportUsers($journal, $users);
00174 header("Content-Type: application/xml");
00175 header("Cache-Control: private");
00176 header("Content-Disposition: attachment; filename=\"users.xml\"");
00177 echo XMLCustomWriter::getXML($doc);
00178 break;
00179 case 'exportByRole':
00180 $this->import('UserExportDom');
00181 $users = array();
00182 $rolePaths = array();
00183 foreach (Request::getUserVar('roles') as $rolePath) {
00184 $roleId = $roleDao->getRoleIdFromPath($rolePath);
00185 $thisRoleUsers = &$roleDao->getUsersByRoleId($roleId, $journal->getJournalId());
00186 foreach ($thisRoleUsers->toArray() as $user) {
00187 $users[$user->getUserId()] = $user;
00188 }
00189 $rolePaths[] = $rolePath;
00190 }
00191 $users = array_values($users);
00192 $doc = &UserExportDom::exportUsers($journal, $users, $rolePaths);
00193 header("Content-Type: application/xml");
00194 header("Cache-Control: private");
00195 header("Content-Disposition: attachment; filename=\"users.xml\"");
00196 echo XMLCustomWriter::getXML($doc);
00197 break;
00198 default:
00199 $this->setBreadcrumbs();
00200 $templateMgr->display($this->getTemplatePath() . 'index.tpl');
00201 }
00202 }
00203
00208 function executeCLI($scriptName, &$args) {
00209 $command = array_shift($args);
00210 $xmlFile = array_shift($args);
00211 $journalPath = array_shift($args);
00212 $flags = &$args;
00213
00214 $journalDao = &DAORegistry::getDAO('JournalDAO');
00215 $userDao = &DAORegistry::getDAO('UserDAO');
00216
00217 $journal = &$journalDao->getJournalByPath($journalPath);
00218
00219 if (!$journal) {
00220 if ($journalPath != '') {
00221 echo Locale::translate('plugins.importexport.users.import.errorsOccurred') . ":\n";
00222 echo Locale::translate('plugins.importexport.users.unknownJournal', array('journalPath' => $journalPath)) . "\n\n";
00223 }
00224 $this->usage($scriptName);
00225 return;
00226 }
00227 switch ($command) {
00228 case 'import':
00229 $this->import('UserXMLParser');
00230
00231 $sendNotify = in_array('send_notify', $flags);
00232 $continueOnError = in_array('continue_on_error', $flags);
00233
00234 import('file.FileManager');
00235
00236
00237 $parser = &new UserXMLParser($journal->getJournalId());
00238 $users = &$parser->parseData($xmlFile);
00239
00240 if (!$parser->importUsers($sendNotify, $continueOnError)) {
00241
00242 echo Locale::translate('plugins.importexport.users.import.errorsOccurred') . ":\n";
00243 foreach ($parser->getErrors() as $error) {
00244 echo "\t$error\n";
00245 }
00246 return false;
00247 }
00248
00249
00250 echo Locale::translate('plugins.importexport.users.import.usersWereImported') . ":\n";
00251 foreach ($parser->getImportedUsers() as $user) {
00252 echo "\t" . $user->getUserName() . "\n";
00253 }
00254
00255 return true;
00256 break;
00257 case 'export':
00258 $this->import('UserExportDom');
00259 $roleDao = &DAORegistry::getDAO('RoleDAO');
00260 $rolePaths = null;
00261 if (empty($args)) {
00262 $users = &$roleDao->getUsersByJournalId($journal->getJournalId());
00263 $users = &$users->toArray();
00264 } else {
00265 $users = array();
00266 $rolePaths = array();
00267 foreach ($args as $rolePath) {
00268 $roleId = $roleDao->getRoleIdFromPath($rolePath);
00269 $thisRoleUsers = &$roleDao->getUsersByRoleId($roleId, $journal->getJournalId());
00270 foreach ($thisRoleUsers->toArray() as $user) {
00271 $users[$user->getUserId()] = $user;
00272 }
00273 $rolePaths[] = $rolePath;
00274 }
00275 $users = array_values($users);
00276 }
00277 $doc = &UserExportDom::exportUsers($journal, $users, $rolePaths);
00278 if (($h = fopen($xmlFile, 'wb'))===false) {
00279 echo Locale::translate('plugins.importexport.users.export.errorsOccurred') . ":\n";
00280 echo Locale::translate('plugins.importexport.users.export.couldNotWriteFile', array('fileName' => $xmlFile)) . "\n";
00281 return false;
00282 }
00283 fwrite($h, XMLCustomWriter::getXML($doc));
00284 fclose($h);
00285 return true;
00286 }
00287 $this->usage($scriptName);
00288 }
00289
00293 function usage($scriptName) {
00294 echo Locale::translate('plugins.importexport.users.cliUsage', array(
00295 'scriptName' => $scriptName,
00296 'pluginName' => $this->getName()
00297 )) . "\n";
00298 }
00299 }
00300
00301 ?>