/** * Internal function to return a Role object from a row. * @param $row array * @return Role */ function &_returnRoleFromRow(&$row) { $role = new Role(); $role->setJournalId($row['journal_id']); $role->setUserId($row['user_id']); $role->setRoleId($row['role_id']); HookRegistry::call('RoleDAO::_returnRoleFromRow', array(&$role, &$row)); return $role; }
/** * Create initial required data. * @return boolean */ function createData() { // Add initial site data $locale = $this->getParam('locale'); $siteDao =& DAORegistry::getDAO('SiteDAO', $this->dbconn); $site = new Site(); $site->setRedirect(0); $site->setMinPasswordLength(INSTALLER_DEFAULT_MIN_PASSWORD_LENGTH); $site->setPrimaryLocale($locale); $site->setInstalledLocales($this->installedLocales); $site->setSupportedLocales($this->installedLocales); if (!$siteDao->insertSite($site)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $siteSettingsDao =& DAORegistry::getDAO('SiteSettingsDAO'); $siteSettingsDao->updateSetting('title', array($locale => __(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactName', array($locale => __(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactEmail', array($locale => $this->getParam('adminEmail')), null, true); // Add initial site administrator user $userDao =& DAORegistry::getDAO('UserDAO', $this->dbconn); $user = new User(); $user->setUsername($this->getParam('adminUsername')); $user->setPassword(Validation::encryptCredentials($this->getParam('adminUsername'), $this->getParam('adminPassword'), $this->getParam('encryption'))); $user->setFirstName($user->getUsername()); $user->setLastName(''); $user->setEmail($this->getParam('adminEmail')); if (!$userDao->insertUser($user)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $roleDao =& DAORegistry::getDao('RoleDAO', $this->dbconn); $role = new Role(); $role->setJournalId(0); $role->setUserId($user->getId()); $role->setRoleId(ROLE_ID_SITE_ADMIN); if (!$roleDao->insertRole($role)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } // Install email template list and data for each locale $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO'); $emailTemplateDao->installEmailTemplates($emailTemplateDao->getMainEmailTemplatesFilename()); foreach ($this->installedLocales as $locale) { $emailTemplateDao->installEmailTemplateData($emailTemplateDao->getMainEmailTemplateDataFilename($locale)); } // Install filters and filter templates. $this->installFilterTemplates(); return true; }
/** * Register a new user. */ function execute() { $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& Request::getJournal(); if (isset($this->userId)) { $user =& $userDao->getById($this->userId); } if (!isset($user)) { $user = new User(); } $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setLastName($this->getData('lastName')); $user->setInitials($this->getData('initials')); $user->setGender($this->getData('gender')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setSignature($this->getData('signature'), null); // Localized $user->setEmail($this->getData('email')); $user->setData('orcid', $this->getData('orcid')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setCountry($this->getData('country')); $user->setBiography($this->getData('biography'), null); // Localized $user->setGossip($this->getData('gossip'), null); // Localized $user->setMustChangePassword($this->getData('mustChangePassword') ? 1 : 0); $user->setAuthId((int) $this->getData('authId')); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (AppLocale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); if ($user->getAuthId()) { $authDao =& DAORegistry::getDAO('AuthSourceDAO'); $auth =& $authDao->getPlugin($user->getAuthId()); } if ($user->getId() != null) { $userId = $user->getId(); if ($this->getData('password') !== '') { if (isset($auth)) { $auth->doSetUserPassword($user->getUsername(), $this->getData('password')); $user->setPassword(Validation::encryptCredentials($userId, Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($user->getUsername(), $this->getData('password'))); } } if (isset($auth)) { // FIXME Should try to create user here too? $auth->doSetUserInfo($user); } $userDao->updateObject($user); } else { $user->setUsername($this->getData('username')); if ($this->getData('generatePassword')) { $password = Validation::generatePassword(); $sendNotify = true; } else { $password = $this->getData('password'); $sendNotify = $this->getData('sendNotify'); } if (isset($auth)) { $user->setPassword($password); // FIXME Check result and handle failures $auth->doCreateUser($user); $user->setAuthId($auth->authId); $user->setPassword(Validation::encryptCredentials($user->getId(), Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($this->getData('username'), $password)); } $user->setDateRegistered(Core::getCurrentDate()); $userId = $userDao->insertUser($user); $isManager = Validation::isJournalManager(); if (!empty($this->_data['enrollAs'])) { foreach ($this->getData('enrollAs') as $roleName) { // Enroll new user into an initial role $roleDao =& DAORegistry::getDAO('RoleDAO'); $roleId = $roleDao->getRoleIdFromPath($roleName); if (!$isManager && $roleId != ROLE_ID_READER) { continue; } if ($roleId != null) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId($roleId); $roleDao->insertRole($role); } } } if ($sendNotify) { // Send welcome email to user import('classes.mail.MailTemplate'); $mail = new MailTemplate('USER_REGISTER'); $mail->setFrom($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $mail->assignParams(array('username' => $this->getData('username'), 'password' => $password, 'userFullName' => $user->getFullName())); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); } } // Insert the user interests $interests = $this->getData('interestsKeywords') ? $this->getData('interestsKeywords') : $this->getData('interestsTextOnly'); import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $interestManager->setInterestsForUser($user, $interests); }
/** * Register a new user. */ function execute() { $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& Request::getJournal(); if (isset($this->userId)) { $user =& $userDao->getUser($this->userId); } if (!isset($user)) { $user = new User(); } $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setLastName($this->getData('lastName')); $user->setInitials($this->getData('initials')); $user->setGender($this->getData('gender')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setSignature($this->getData('signature'), null); // Localized $user->setEmail($this->getData('email')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setCountry($this->getData('country')); $user->setBiography($this->getData('biography'), null); // Localized $user->setGossip($this->getData('gossip'), null); // Localized $user->setMustChangePassword($this->getData('mustChangePassword') ? 1 : 0); $user->setAuthId((int) $this->getData('authId')); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (Locale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); if ($user->getAuthId()) { $authDao =& DAORegistry::getDAO('AuthSourceDAO'); $auth =& $authDao->getPlugin($user->getAuthId()); } if ($user->getId() != null) { $userId = $user->getId(); if ($this->getData('password') !== '') { if (isset($auth)) { $auth->doSetUserPassword($user->getUsername(), $this->getData('password')); $user->setPassword(Validation::encryptCredentials($userId, Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($user->getUsername(), $this->getData('password'))); } } if (isset($auth)) { // FIXME Should try to create user here too? $auth->doSetUserInfo($user); } $userDao->updateObject($user); } else { $user->setUsername($this->getData('username')); if ($this->getData('generatePassword')) { $password = Validation::generatePassword(); $sendNotify = true; } else { $password = $this->getData('password'); $sendNotify = $this->getData('sendNotify'); } if (isset($auth)) { $user->setPassword($password); // FIXME Check result and handle failures $auth->doCreateUser($user); $user->setAuthId($auth->authId); $user->setPassword(Validation::encryptCredentials($user->getId(), Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($this->getData('username'), $password)); } $user->setDateRegistered(Core::getCurrentDate()); $userId = $userDao->insertUser($user); $isManager = Validation::isJournalManager(); // EL on March 13th 2013 // If this is used, it should be totally modified if (!empty($this->_data['enrollAs'])) { foreach ($this->getData('enrollAs') as $roleName) { // Enroll new user into an initial role $roleDao =& DAORegistry::getDAO('RoleDAO'); $roleId = $roleDao->getRoleIdFromPath($roleName); if (!$isManager && $roleId != ROLE_ID_READER) { continue; } if ($roleId != null) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId($roleId); $roleDao->insertRole($role); } } } if ($sendNotify) { // Send welcome email to user import('classes.mail.MailTemplate'); $mail = new MailTemplate('USER_REGISTER'); $mail->setFrom($journal->getSetting('supportEmail'), $journal->getSetting('supportName')); $mail->assignParams(array('username' => $this->getData('username'), 'password' => String::substr($this->getData('password'), 0, 30), 'supportName' => $journal->getSetting('supportName'), 'userFullName' => $user->getFullName())); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); } } // Add reviewing interests to interests table $interestDao =& DAORegistry::getDAO('InterestDAO'); $interests = is_array(Request::getUserVar('interestsKeywords')) ? Request::getUserVar('interestsKeywords') : array(); if (is_array($interests)) { $interests = array_map('urldecode', $interests); // The interests are coming in encoded -- Decode them for DB storage $interestTextOnly = Request::getUserVar('interests'); if (!empty($interestsTextOnly)) { // If JS is disabled, this will be the input to read $interestsTextOnly = explode(",", $interestTextOnly); } else { $interestsTextOnly = null; } if ($interestsTextOnly && !isset($interests)) { $interests = $interestsTextOnly; } elseif (isset($interests) && !is_array($interests)) { $interests = array($interests); } $interestDao->insertInterests($interests, $userId, true); } }
/** * Save journal settings. */ function execute() { $journalDao =& DAORegistry::getDAO('JournalDAO'); if (isset($this->journalId)) { $journal =& $journalDao->getJournal($this->journalId); } if (!isset($journal)) { $journal = new Journal(); } $journal->setPath($this->getData('journalPath')); $journal->setEnabled($this->getData('enabled')); if ($journal->getId() != null) { $isNewJournal = false; $journalDao->updateJournal($journal); $section = null; } else { $isNewJournal = true; $site =& Request::getSite(); // Give it a default primary locale $journal->setPrimaryLocale($site->getPrimaryLocale()); $journalId = $journalDao->insertJournal($journal); $journalDao->resequenceJournals(); // Make the site administrator the journal manager of newly created journals $sessionManager =& SessionManager::getManager(); $userSession =& $sessionManager->getUserSession(); if ($userSession->getUserId() != null && $userSession->getUserId() != 0 && !empty($journalId)) { $role = new Role(); $role->setJournalId($journalId); $role->setUserId($userSession->getUserId()); $role->setRoleId(ROLE_ID_JOURNAL_MANAGER); $roleDao =& DAORegistry::getDAO('RoleDAO'); $roleDao->insertRole($role); } // Make the file directories for the journal import('lib.pkp.classes.file.FileManager'); FileManager::mkdir(Config::getVar('files', 'files_dir') . '/journals/' . $journalId); FileManager::mkdir(Config::getVar('files', 'files_dir') . '/journals/' . $journalId . '/articles'); FileManager::mkdir(Config::getVar('files', 'files_dir') . '/journals/' . $journalId . '/issues'); FileManager::mkdir(Config::getVar('files', 'public_files_dir') . '/journals/' . $journalId); // Install default journal settings $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); $titles = $this->getData('title'); AppLocale::requireComponents(array(LOCALE_COMPONENT_OJS_DEFAULT, LOCALE_COMPONENT_APPLICATION_COMMON)); $journalSettingsDao->installSettings($journalId, 'registry/journalSettings.xml', array('indexUrl' => Request::getIndexUrl(), 'journalPath' => $this->getData('journalPath'), 'primaryLocale' => $site->getPrimaryLocale(), 'journalName' => $titles[$site->getPrimaryLocale()])); // Install the default RT versions. import('classes.rt.ojs.JournalRTAdmin'); $journalRtAdmin = new JournalRTAdmin($journalId); $journalRtAdmin->restoreVersions(false); // Create a default "Articles" section $sectionDao =& DAORegistry::getDAO('SectionDAO'); $section = new Section(); $section->setJournalId($journal->getId()); $section->setTitle(__('section.default.title'), $journal->getPrimaryLocale()); $section->setAbbrev(__('section.default.abbrev'), $journal->getPrimaryLocale()); $section->setMetaIndexed(true); $section->setMetaReviewed(true); $section->setPolicy(__('section.default.policy'), $journal->getPrimaryLocale()); $section->setEditorRestricted(false); $section->setHideTitle(false); $sectionDao->insertSection($section); } $journal->updateSetting('title', $this->getData('title'), 'string', true); $journal->updateSetting('description', $this->getData('description'), 'string', true); // Make sure all plugins are loaded for settings preload PluginRegistry::loadAllPlugins(); HookRegistry::call('JournalSiteSettingsForm::execute', array(&$this, &$journal, &$section, &$isNewJournal)); }
function implicitAuthAdmin($userID, $authStr) { $adminstr = Config::getVar('security', "implicit_auth_admin_list"); $adminlist = explode(" ", $adminstr); $key = array_search($authStr, $adminlist); $roleDao =& DAORegistry::getDAO('RoleDAO'); // If they are in the list of users who should be admins if ($key !== false) { // and if they are not already an admin if (!$roleDao->userHasRole(0, $userID, ROLE_ID_SITE_ADMIN)) { syslog(LOG_ERR, "Implicit Auth - Making Admin: " . $userID); // make them an admin $role = new Role(); $role->setJournalId(0); $role->setUserId($userID); $role->setRoleId(ROLE_ID_SITE_ADMIN); $roleDao->insertRole($role); } } else { // If they are not in the admin list - then be sure they are not an admin in the role table syslog(LOG_ERR, "removing admin for: " . $userID); $roleDao->deleteRoleByUserId($userID, 0, ROLE_ID_SITE_ADMIN); } }
function importUsers() { assert($this->xml->name == 'users'); import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $roleDao =& DAORegistry::getDAO('RoleDAO'); $userDAO =& DAORegistry::getDAO('UserDAO'); $publicFileManager =& new PublicFileManager(); $site =& Request::getSite(); $siteSupportedLocales = $site->getSupportedLocales(); $this->nextElement(); while ($this->xml->name == 'user') { $userXML = $this->getCurrentElementAsDom(); $username = (string) $userXML->username; $email = (string) $userXML->email; $userByEmail = $userDAO->getUserByEmail($email); $user = null; if (!empty($userByEmail)) { $user = $userByEmail; } else { $user = new User(); $user->setUsername((string) $userXML->username); $user->setPassword((string) $userXML->password); $user->setSalutation((string) $userXML->salutation); $user->setFirstName((string) $userXML->firstName); $user->setMiddleName((string) $userXML->middleName); $user->setInitials((string) $userXML->initials); $user->setLastName((string) $userXML->lastName); $user->setSuffix((string) $userXML->suffix); $user->setGender((string) $userXML->gender); $user->setEmail((string) $userXML->email); $user->setUrl((string) $userXML->url); $user->setPhone((string) $userXML->phone); $user->setFax((string) $userXML->fax); $user->setMailingAddress((string) $userXML->mailingAddress); $user->setBillingAddress((string) $userXML->billingAddress); $user->setCountry((string) $userXML->country); $locales = array(); foreach (explode(':', (string) $userXML->locales) as $locale) { if (AppLocale::isLocaleValid($locale) && in_array($locale, $siteSupportedLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); $user->setDateLastEmail((string) $userXML->dateLastEmail); $user->setDateRegistered((string) $userXML->dateRegistered); $user->setDateValidated((string) $userXML->dateValidated); $user->setDateLastLogin((string) $userXML->dateLastLogin); $user->setMustChangePassword((int) $userXML->mustChangePassword); $user->setDisabled((int) $userXML->disabled); $user->setDisabledReason((string) $userXML->disabledReason); $user->setAuthId((int) $userXML->authId); $user->setAuthStr((string) $userXML->authStr); $user->setInlineHelp((int) $userXML->inlineHelp); $this->generateUsername($user); $userDAO->insertUser($user); $this->restoreDataObjectSettings($userDAO, $userXML->settings, 'user_settings', 'user_id', $user->getId()); $user = $userDAO->getById($user->getId()); $profileImage =& $user->getSetting('profileImage'); if ($profileImage) { $oldProfileImage = $profileImage['uploadName']; $extension = $publicFileManager->getExtension($oldProfileImage); $newProfileImage = 'profileImage-' . $user->getId() . "." . $extension; $sourceFile = $this->siteFolderPath . '/' . $oldProfileImage; $publicFileManager->copyFile($sourceFile, $publicFileManager->getSiteFilesPath() . "/" . $newProfileImage); unlink($sourceFile); $profileImage['uploadName'] = $newProfileImage; $user->updateSetting('profileImage', $profileImage); } $interests = array(); foreach ($userXML->interest as $interest) { $interests[] = (string) $interest; } $interestManager->setInterestsForUser($user, $interests); } $this->idTranslationTable->register(INTERNAL_TRANSFER_OBJECT_USER, (int) $userXML->oldId, $user->getId()); foreach ($userXML->role as $roleXML) { $role = new Role(); $role->setRoleId((int) $roleXML); $role->setUserId($user->getId()); $role->setJournalId($this->journal->getId()); $roleDao->insertRole($role); } $this->nextElement(); } }
/** * Enroll a user in a role. * Last update: EL on February 14th 2013 */ function enroll($args) { $this->validate(); $roleId = (int) (isset($args[0]) ? $args[0] : Request::getUserVar('roleId')); // Get a list of users to enroll -- either from the // submitted array 'users', or the single user ID in // 'userId' $users = Request::getUserVar('users'); if (!isset($users) && Request::getUserVar('userId') != null) { $users = array(Request::getUserVar('userId')); } $journalDao =& DAORegistry::getDAO('JournalDAO'); $journal =& $journalDao->getJournalByPath(Request::getRequestedJournalPath()); $roleDao =& DAORegistry::getDAO('RoleDAO'); $rolePath = $roleDao->getRolePath($roleId); // Added by EL on April 24, 2012 // Management of the ERC Member Status $sectionEditorsDAO =& DAORegistry::getDAO('SectionEditorsDAO'); // Added by EL on February 13th 2013 // Management of the erc for the reviewers $ercReviewersDAO =& DAORegistry::getDAO('ErcReviewersDAO'); $ercMemberStatus =& Request::getUserVar('ercMemberStatus'); $ethicsCommitteeId =& Request::getUserVar('ethicsCommittee'); // the role path "reviewer" includes all the erc members but also the secretaries // if the enrollment concern secretaries, the role path and the role id is further modified if ($users != null && is_array($users) && $rolePath == 'reviewer') { // Check if info provided if (!empty($ethicsCommitteeId) && !empty($ercMemberStatus) && $ethicsCommitteeId != "NA" && $ercMemberStatus != "NA") { if ($ercMemberStatus == "Chair" or $ercMemberStatus == "Vice-Chair" or $ercMemberStatus == "Member") { $reviewers = $ercReviewersDAO->getReviewersBySectionId($journal->getId(), $ethicsCommitteeId); $chairs = $ercReviewersDAO->getReviewersBySectionIdByStatus($journal->getId(), $ethicsCommitteeId, 1); $viceChairs = $ercReviewersDAO->getReviewersBySectionIdByStatus($journal->getId(), $ethicsCommitteeId, 2); // Here the number of members per committee is set to 20, // and of chair or vice-chair to 1 if (count($reviewers) + count($users) < 21 && $ercMemberStatus == "Member" || count($chairs) + count($users) < 2 && $ercMemberStatus == "Chair" || count($viceChairs) + count($users) < 2 && $ercMemberStatus == "Vice-Chair") { for ($i = 0; $i < count($users); $i++) { if (!$ercReviewersDAO->ercReviewerExists($journal->getId(), $ethicsCommitteeId, $users[$i])) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId)) { // Create the role and insert it $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } // Assign the reviewer to the specified committee if ($ercMemberStatus == "Chair") { $status = 1; } elseif ($ercMemberStatus == "Vice-Chair") { $status = 2; } elseif ($ercMemberStatus == "Member") { $status = 3; } $ercReviewersDAO->insertReviewer($journal->getId(), $ethicsCommitteeId, $users[$i], $status); } } } } elseif ($ercMemberStatus == "Secretary") { //Get all the secretaries already enrolled in this particular committee $secretaries = $sectionEditorsDAO->getEditorsBySectionId($journal->getId(), $ethicsCommitteeId); // The role id and the role path is modified $roleId = ROLE_ID_SECTION_EDITOR; $rolePath = $roleDao->getRolePath($roleId); //Here, the number of secretaries per committee is limited to 5 if (count($secretaries) + count($users) < 6) { for ($i = 0; $i < count($users); $i++) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId) && !$sectionEditorsDAO->ercSecretaryExists($ethicsCommitteeId, $users[$i])) { // Create the role and insert it $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); // Assign the secretary to the specified committee $sectionEditorsDAO->insertEditor($journal->getId(), $ethicsCommitteeId, $users[$i], 1, 1); } } } } } else { Request::redirect(null, null, 'enrollSearch'); } } else { if ($users != null && is_array($users) && $roleId == 'ExtReviewer') { $roleId = '4096'; $rolePath = 'extReviewer'; $userDAO =& DAORegistry::getDAO('UserDAO'); for ($i = 0; $i < count($users); $i++) { if (!$ercReviewersDAO->ercReviewerExists($journal->getId(), 0, $users[$i])) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } $ercReviewersDAO->insertReviewer($journal->getId(), 0, $users[$i], 0); } } } elseif ($users != null && is_array($users) && $rolePath != '') { for ($i = 0; $i < count($users); $i++) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } } } } Request::redirect(null, null, 'people', empty($rolePath) ? null : $rolePath . 's'); }
/** * Save profile settings. */ function execute() { $user =& Request::getUser(); $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setLastName($this->getData('lastName')); $user->setGender($this->getData('gender')); $user->setInitials($this->getData('initials')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setSignature($this->getData('signature'), null); // Localized $user->setEmail($this->getData('email')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setCountry($this->getData('country')); $user->setBiography($this->getData('biography'), null); // Localized $userId = $user->getId(); // Insert the user interests import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $interestManager->insertInterests($userId, $this->getData('interestsKeywords'), $this->getData('interests')); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (Locale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); $userDao =& DAORegistry::getDAO('UserDAO'); $userDao->updateObject($user); $roleDao =& DAORegistry::getDAO('RoleDAO'); $journalDao =& DAORegistry::getDAO('JournalDAO'); // Roles $journal =& Request::getJournal(); if ($journal) { $role = new Role(); $role->setUserId($user->getId()); $role->setJournalId($journal->getId()); if ($journal->getSetting('allowRegReviewer')) { $role->setRoleId(ROLE_ID_REVIEWER); $hasRole = Validation::isReviewer(); $wantsRole = Request::getUserVar('reviewerRole'); if ($hasRole && !$wantsRole) { $roleDao->deleteRole($role); } if (!$hasRole && $wantsRole) { $roleDao->insertRole($role); } } if ($journal->getSetting('allowRegAuthor')) { $role->setRoleId(ROLE_ID_AUTHOR); $hasRole = Validation::isAuthor(); $wantsRole = Request::getUserVar('authorRole'); if ($hasRole && !$wantsRole) { $roleDao->deleteRole($role); } if (!$hasRole && $wantsRole) { $roleDao->insertRole($role); } } if ($journal->getSetting('allowRegReader')) { $role->setRoleId(ROLE_ID_READER); $hasRole = Validation::isReader(); $wantsRole = Request::getUserVar('readerRole'); if ($hasRole && !$wantsRole) { $roleDao->deleteRole($role); } if (!$hasRole && $wantsRole) { $roleDao->insertRole($role); } } } $openAccessNotify = Request::getUserVar('openAccessNotify'); $userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO'); $journals =& $journalDao->getEnabledJournals(); $journals =& $journals->toArray(); foreach ($journals as $thisJournal) { if ($thisJournal->getSetting('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION && $thisJournal->getSetting('enableOpenAccessNotification')) { $currentlyReceives = $user->getSetting('openAccessNotification', $thisJournal->getJournalId()); $shouldReceive = !empty($openAccessNotify) && in_array($thisJournal->getJournalId(), $openAccessNotify); if ($currentlyReceives != $shouldReceive) { $userSettingsDao->updateSetting($user->getId(), 'openAccessNotification', $shouldReceive, 'bool', $thisJournal->getJournalId()); } } } if ($user->getAuthId()) { $authDao =& DAORegistry::getDAO('AuthSourceDAO'); $auth =& $authDao->getPlugin($user->getAuthId()); } if (isset($auth)) { $auth->doSetUserInfo($user); } }
/** * Register a new user. */ function execute() { $requireValidation = Config::getVar('email', 'require_validation'); if ($this->existingUser) { // If using implicit auth - we hardwire that we are working on an existing user // Existing user in the system $userDao =& DAORegistry::getDAO('UserDAO'); if ($this->implicitAuth) { // If we are using implicit auth - then use the session username variable - rather than data from the form $sessionManager =& SessionManager::getManager(); $session =& $sessionManager->getUserSession(); $user =& $userDao->getUserByUsername($session->getSessionVar('username')); } else { $user =& $userDao->getUserByUsername($this->getData('username')); } if ($user == null) { return false; } $userId = $user->getId(); } else { // New user $user = new User(); $user->setUsername($this->getData('username')); $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setInitials($this->getData('initials')); $user->setLastName($this->getData('lastName')); $user->setGender($this->getData('gender')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setSignature($this->getData('signature'), null); // Localized $user->setEmail($this->getData('email')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setBiography($this->getData('biography'), null); // Localized $user->setDateRegistered(Core::getCurrentDate()); $user->setCountry($this->getData('country')); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (Locale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); if (isset($this->defaultAuth)) { $user->setPassword($this->getData('password')); // FIXME Check result and handle failures $this->defaultAuth->doCreateUser($user); $user->setAuthId($this->defaultAuth->authId); } $user->setPassword(Validation::encryptCredentials($this->getData('username'), $this->getData('password'))); if ($requireValidation) { // The account should be created in a disabled // state. $user->setDisabled(true); $user->setDisabledReason(Locale::translate('user.login.accountNotValidated')); } $userDao =& DAORegistry::getDAO('UserDAO'); $userDao->insertUser($user); $userId = $user->getId(); if (!$userId) { return false; } // Add reviewing interests to interests table $interestDao =& DAORegistry::getDAO('InterestDAO'); $interests = Request::getUserVar('interestsKeywords'); if (is_array($interests)) { $interests = array_map('urldecode', $interests); // The interests are coming in encoded -- Decode them for DB storage $interestTextOnly = Request::getUserVar('interests'); if (!empty($interestsTextOnly)) { // If JS is disabled, this will be the input to read $interestsTextOnly = explode(",", $interestTextOnly); } else { $interestsTextOnly = null; } if ($interestsTextOnly && !isset($interests)) { $interests = $interestsTextOnly; } elseif (isset($interests) && !is_array($interests)) { $interests = array($interests); } $interestDao->insertInterests($interests, $user->getId(), true); } $sessionManager =& SessionManager::getManager(); $session =& $sessionManager->getUserSession(); $session->setSessionVar('username', $user->getUsername()); } $journal =& Request::getJournal(); $roleDao =& DAORegistry::getDAO('RoleDAO'); // Roles users are allowed to register themselves in $allowedRoles = array('reader' => 'registerAsReader', 'author' => 'registerAsAuthor', 'reviewer' => 'registerAsReviewer'); $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); if (!$journalSettingsDao->getSetting($journal->getId(), 'allowRegReader')) { unset($allowedRoles['reader']); } if (!$journalSettingsDao->getSetting($journal->getId(), 'allowRegAuthor')) { unset($allowedRoles['author']); } if (!$journalSettingsDao->getSetting($journal->getId(), 'allowRegReviewer')) { unset($allowedRoles['reviewer']); } foreach ($allowedRoles as $k => $v) { $roleId = $roleDao->getRoleIdFromPath($k); if ($this->getData($v) && !$roleDao->roleExists($journal->getId(), $userId, $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId($roleId); $roleDao->insertRole($role); } } if (!$this->existingUser) { import('classes.mail.MailTemplate'); if ($requireValidation) { // Create an access key import('lib.pkp.classes.security.AccessKeyManager'); $accessKeyManager = new AccessKeyManager(); $accessKey = $accessKeyManager->createKey('RegisterContext', $user->getId(), null, Config::getVar('email', 'validation_timeout')); // Send email validation request to user $mail = new MailTemplate('USER_VALIDATE'); $mail->setFrom($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $mail->assignParams(array('userFullName' => $user->getFullName(), 'supportName' => $journal->getSetting('supportName'), 'activateUrl' => Request::url($journal->getPath(), 'user', 'activateUser', array($this->getData('username'), $accessKey)))); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); unset($mail); } if ($this->getData('sendPassword')) { // Send welcome email to user $mail = new MailTemplate('USER_REGISTER'); $mail->setFrom($journal->getSetting('supportEmail'), $journal->getSetting('supportName')); $mail->assignParams(array('username' => $this->getData('username'), 'password' => String::substr($this->getData('password'), 0, 30), 'supportName' => $journal->getSetting('supportName'), 'userFullName' => $user->getFullName())); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); unset($mail); } } if (isset($allowedRoles['reader']) && $this->getData('openAccessNotification')) { $userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO'); $userSettingsDao->updateSetting($userId, 'openAccessNotification', true, 'bool', $journal->getId()); } }
/** * Enrollment of a new committee member * Last modified: EL on February 17th 2013 * Originally comming from SubmissionEditHandler * (just doing the redirection after the enrollment) * Which is not anymore the case */ function enroll($args) { $sectionId = isset($args[0]) ? (int) $args[0] : 0; $journal =& Request::getJournal(); // For security purposes $thisUser =& Request::getUser(); if ($thisUser->getSecretaryCommitteeId() == $sectionId) { $roleDao =& DAORegistry::getDAO('RoleDAO'); $roleId = $roleDao->getRoleIdFromPath('reviewer'); // Get all the secretaries enrolled in this specific erc $sectionEditorsDao =& DAORegistry::getDAO('SectionEditorsDAO'); $secretaries = $sectionEditorsDao->getEditorsBySectionId($journal->getId(), $sectionId); // Get all the different members enrolled in this specific erc $ercReviewersDao =& DAORegistry::getDAO('ErcReviewersDAO'); $reviewers = $ercReviewersDao->getReviewersBySectionId($journal->getId(), $sectionId); $chairs = $ercReviewersDao->getReviewersBySectionIdByStatus($journal->getId(), $sectionId, 1); $viceChairs = $ercReviewersDao->getReviewersBySectionIdByStatus($journal->getId(), $sectionId, 2); $users = Request::getUserVar('users'); if (!is_array($users) && Request::getUserVar('userId') != null) { $users = array(Request::getUserVar('userId')); } $ercMemberStatus =& Request::getUserVar('ercStatus'); // Enroll secretaries if ($ercMemberStatus == "Secretary" && count($secretaries) + count($users) < 6) { $roleId = $roleDao->getRoleIdFromPath('sectionEditor'); for ($i = 0; $i < count($users); $i++) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId) && !$sectionEditorsDao->ercSecretaryExists($sectionId, $users[$i])) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); $sectionEditorsDao->insertEditor($journal->getId(), $sectionId, $users[$i], 1, 1); } } Request::redirect(null, null, 'section', $sectionId); } elseif ($ercMemberStatus == "Chair" && count($chairs) + count($users) < 2 || $ercMemberStatus == "Member" && count($reviewers) + count($users) < 21 || $ercMemberStatus == "Vice-Chair" && count($viceChairs) + count($users) < 2) { for ($i = 0; $i < count($users); $i++) { if (!$ercReviewersDao->ercReviewerExists($journal->getId(), $sectionId, $users[$i])) { // Create the role and insert it if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } // Assign the reviewer to the specified committee if ($ercMemberStatus == "Chair") { $status = 1; } elseif ($ercMemberStatus == "Vice-Chair") { $status = 2; } elseif ($ercMemberStatus == "Member") { $status = 3; } $ercReviewersDao->insertReviewer($journal->getId(), $sectionId, $users[$i], $status); } } Request::redirect(null, null, 'section', $sectionId); } Request::redirect(null, null, 'enrollSearch', $sectionId); } else { Request::redirect(null, 'user'); } }
/** * Register a new user. * @return userId int */ function execute() { $userDao =& DAORegistry::getDAO('UserDAO'); $user = new User(); $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setLastName($this->getData('lastName')); $user->setGender($this->getData('gender')); $user->setInitials($this->getData('initials')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setEmail($this->getData('email')); $user->setData('orcid', $this->getData('orcid')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setCountry($this->getData('country')); $user->setBiography($this->getData('biography'), null); // Localized $user->setGossip($this->getData('gossip'), null); // Localized $authDao =& DAORegistry::getDAO('AuthSourceDAO'); $auth =& $authDao->getDefaultPlugin(); $user->setAuthId($auth ? $auth->getAuthId() : 0); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (AppLocale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); $user->setUsername($this->getData('username')); $password = Validation::generatePassword(); $sendNotify = $this->getData('sendNotify'); if (isset($auth)) { $user->setPassword($password); // FIXME Check result and handle failures $auth->doCreateUser($user); $user->setAuthId($auth->authId); $user->setPassword(Validation::encryptCredentials($user->getId(), Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($this->getData('username'), $password)); } $user->setMustChangePassword(isset($auth) ? 0 : 1); $user->setDateRegistered(Core::getCurrentDate()); parent::execute($user); $userId = $userDao->insertUser($user); // Insert the user interests $interests = $this->getData('interestsKeywords') ? $this->getData('interestsKeywords') : $this->getData('interestsTextOnly'); import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $interestManager->setInterestsForUser($user, $interests); $roleDao =& DAORegistry::getDAO('RoleDAO'); $journal =& Request::getJournal(); $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId(ROLE_ID_REVIEWER); $roleDao->insertRole($role); if ($sendNotify) { // Send welcome email to user import('classes.mail.MailTemplate'); $mail = new MailTemplate('REVIEWER_REGISTER'); $mail->setReplyTo(null); $mail->assignParams(array('username' => $this->getData('username'), 'password' => $password, 'userFullName' => $user->getFullName())); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); } return $userId; }
/** * Create initial required data. * @return boolean */ function createData() { if ($this->getParam('manualInstall')) { // Add insert statements for default data // FIXME use ADODB data dictionary? $this->executeSQL(sprintf('INSERT INTO site (primary_locale, installed_locales) VALUES (\'%s\', \'%s\')', $this->getParam('locale'), join(':', $this->installedLocales))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'title', 'string', addslashes(Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'contactName', 'string', addslashes(Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'contactEmail', 'string', addslashes($this->getParam('adminEmail')), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO users (username, first_name, last_name, password, email, date_registered, date_last_login) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', $this->getParam('adminUsername'), $this->getParam('adminUsername'), $this->getParam('adminUsername'), Validation::encryptCredentials($this->getParam('adminUsername'), $this->getParam('adminPassword'), $this->getParam('encryption')), $this->getParam('adminEmail'), Core::getCurrentDate(), Core::getCurrentDate())); $this->executeSQL(sprintf('INSERT INTO roles (journal_id, user_id, role_id) VALUES (%d, (SELECT user_id FROM users WHERE username = \'%s\'), %d)', 0, $this->getParam('adminUsername'), ROLE_ID_SITE_ADMIN)); // Install email template list and data for each locale $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO'); foreach ($emailTemplateDao->installEmailTemplates($emailTemplateDao->getMainEmailTemplatesFilename(), true) as $sql) { $this->executeSQL($sql); } foreach ($this->installedLocales as $locale) { foreach ($emailTemplateDao->installEmailTemplateData($emailTemplateDao->getMainEmailTemplateDataFilename($locale), true) as $sql) { $this->executeSQL($sql); } } } else { // Add initial site data $locale = $this->getParam('locale'); $siteDao =& DAORegistry::getDAO('SiteDAO', $this->dbconn); $site = new Site(); $site->setRedirect(0); $site->setMinPasswordLength(INSTALLER_DEFAULT_MIN_PASSWORD_LENGTH); $site->setPrimaryLocale($locale); $site->setInstalledLocales($this->installedLocales); $site->setSupportedLocales($this->installedLocales); if (!$siteDao->insertSite($site)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $siteSettingsDao =& DAORegistry::getDAO('SiteSettingsDAO'); $siteSettingsDao->updateSetting('title', array($locale => Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactName', array($locale => Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactEmail', array($locale => $this->getParam('adminEmail')), null, true); // Add initial site administrator user $userDao =& DAORegistry::getDAO('UserDAO', $this->dbconn); $user = new User(); $user->setUsername($this->getParam('adminUsername')); $user->setPassword(Validation::encryptCredentials($this->getParam('adminUsername'), $this->getParam('adminPassword'), $this->getParam('encryption'))); $user->setFirstName($user->getUsername()); $user->setLastName(''); $user->setEmail($this->getParam('adminEmail')); if (!$userDao->insertUser($user)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $roleDao =& DAORegistry::getDao('RoleDAO', $this->dbconn); $role = new Role(); $role->setJournalId(0); $role->setUserId($user->getId()); $role->setRoleId(ROLE_ID_SITE_ADMIN); if (!$roleDao->insertRole($role)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } // Install email template list and data for each locale $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO'); $emailTemplateDao->installEmailTemplates($emailTemplateDao->getMainEmailTemplatesFilename()); foreach ($this->installedLocales as $locale) { $emailTemplateDao->installEmailTemplateData($emailTemplateDao->getMainEmailTemplateDataFilename($locale)); } // Add initial plugin data to versions table $versionDao =& DAORegistry::getDAO('VersionDAO'); import('site.VersionCheck'); $categories = PluginRegistry::getCategories(); foreach ($categories as $category) { PluginRegistry::loadCategory($category, true); $plugins = PluginRegistry::getPlugins($category); foreach ($plugins as $plugin) { $versionFile = $plugin->getPluginPath() . '/version.xml'; if (FileManager::fileExists($versionFile)) { $versionInfo =& VersionCheck::parseVersionXML($versionFile); $pluginVersion = $versionInfo['version']; $pluginVersion->setCurrent(1); $versionDao->insertVersion($pluginVersion); } else { $pluginVersion = new Version(); $pluginVersion->setMajor(1); $pluginVersion->setMinor(0); $pluginVersion->setRevision(0); $pluginVersion->setBuild(0); $pluginVersion->setDateInstalled(Core::getCurrentDate()); $pluginVersion->setCurrent(1); $pluginVersion->setProductType('plugins.' . $category); $pluginVersion->setProduct(basename($plugin->getPluginPath())); $versionDao->insertVersion($pluginVersion); } } } } return true; }
/** * Create initial required data. * @return boolean */ function createData() { if ($this->getParam('manualInstall')) { // Add insert statements for default data // FIXME use ADODB data dictionary? $this->executeSQL(sprintf('INSERT INTO site (primary_locale, installed_locales) VALUES (\'%s\', \'%s\')', $this->getParam('locale'), join(':', $this->installedLocales))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'title', 'string', addslashes(Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'contactName', 'string', addslashes(Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO site_settings (setting_name, setting_type, setting_value, locale) VALUES (\'%s\', \'%s\', \'%s\', \'%s\')', 'contactEmail', 'string', addslashes($this->getParam('adminEmail')), $this->getParam('locale'))); $this->executeSQL(sprintf('INSERT INTO users (username, first_name, last_name, password, email, date_registered, date_last_login) VALUES (\'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\', \'%s\')', $this->getParam('adminUsername'), $this->getParam('adminUsername'), $this->getParam('adminUsername'), Validation::encryptCredentials($this->getParam('adminUsername'), $this->getParam('adminPassword'), $this->getParam('encryption')), $this->getParam('adminEmail'), Core::getCurrentDate(), Core::getCurrentDate())); $this->executeSQL(sprintf('INSERT INTO roles (journal_id, user_id, role_id) VALUES (%d, (SELECT user_id FROM users WHERE username = \'%s\'), %d)', 0, $this->getParam('adminUsername'), ROLE_ID_SITE_ADMIN)); // Install email template list and data for each locale $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO'); foreach ($emailTemplateDao->installEmailTemplates($emailTemplateDao->getMainEmailTemplatesFilename(), true) as $sql) { $this->executeSQL($sql); } foreach ($this->installedLocales as $locale) { foreach ($emailTemplateDao->installEmailTemplateData($emailTemplateDao->getMainEmailTemplateDataFilename($locale), true) as $sql) { $this->executeSQL($sql); } } } else { // Add initial site data $locale = $this->getParam('locale'); $siteDao =& DAORegistry::getDAO('SiteDAO', $this->dbconn); $site = new Site(); $site->setRedirect(0); $site->setMinPasswordLength(INSTALLER_DEFAULT_MIN_PASSWORD_LENGTH); $site->setPrimaryLocale($locale); $site->setInstalledLocales($this->installedLocales); $site->setSupportedLocales($this->installedLocales); if (!$siteDao->insertSite($site)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $siteSettingsDao =& DAORegistry::getDAO('SiteSettingsDAO'); $siteSettingsDao->updateSetting('title', array($locale => Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactName', array($locale => Locale::translate(INSTALLER_DEFAULT_SITE_TITLE)), null, true); $siteSettingsDao->updateSetting('contactEmail', array($locale => $this->getParam('adminEmail')), null, true); // Add initial site administrator user $userDao =& DAORegistry::getDAO('UserDAO', $this->dbconn); $user = new User(); $user->setUsername($this->getParam('adminUsername')); $user->setPassword(Validation::encryptCredentials($this->getParam('adminUsername'), $this->getParam('adminPassword'), $this->getParam('encryption'))); $user->setFirstName($user->getUsername()); $user->setLastName(''); $user->setEmail($this->getParam('adminEmail')); if (!$userDao->insertUser($user)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } $roleDao =& DAORegistry::getDao('RoleDAO', $this->dbconn); $role = new Role(); $role->setJournalId(0); $role->setUserId($user->getId()); $role->setRoleId(ROLE_ID_SITE_ADMIN); if (!$roleDao->insertRole($role)) { $this->setError(INSTALLER_ERROR_DB, $this->dbconn->errorMsg()); return false; } // Install email template list and data for each locale $emailTemplateDao =& DAORegistry::getDAO('EmailTemplateDAO'); $emailTemplateDao->installEmailTemplates($emailTemplateDao->getMainEmailTemplatesFilename()); foreach ($this->installedLocales as $locale) { $emailTemplateDao->installEmailTemplateData($emailTemplateDao->getMainEmailTemplateDataFilename($locale)); } // Install filters and filter templates. $this->installFilterTemplates(); } return true; }
/** * Enroll a user in a role. */ function enroll($args) { $this->validate(); $roleId = (int) (isset($args[0]) ? $args[0] : Request::getUserVar('roleId')); // Get a list of users to enroll -- either from the // submitted array 'users', or the single user ID in // 'userId' $users = Request::getUserVar('users'); if (!isset($users) && Request::getUserVar('userId') != null) { $users = array(Request::getUserVar('userId')); } $journalDao =& DAORegistry::getDAO('JournalDAO'); $journal =& $journalDao->getJournalByPath(Request::getRequestedJournalPath()); $roleDao =& DAORegistry::getDAO('RoleDAO'); $rolePath = $roleDao->getRolePath($roleId); if ($users != null && is_array($users) && $rolePath != '' && $rolePath != 'admin') { for ($i = 0; $i < count($users); $i++) { if (!$roleDao->userHasRole($journal->getId(), $users[$i], $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } } } Request::redirect(null, null, 'people', empty($rolePath) ? null : $rolePath . 's'); }
/** * Fulfill a queued payment. * @param $queuedPayment QueuedPayment * @param $payMethodPluginName string Name of payment plugin. * @return mixed Dependent on payment type. */ function fulfillQueuedPayment(&$queuedPayment, $payMethodPluginName = null) { $returner = false; if ($queuedPayment) { switch ($queuedPayment->getType()) { case PAYMENT_TYPE_MEMBERSHIP: $userDao =& DAORegistry::getDAO('UserDAO'); $user =& $userDao->getUser($queuedPayment->getuserId()); $userDao->renewMembership($user); $returner = true; break; case PAYMENT_TYPE_PURCHASE_SUBSCRIPTION: $subscriptionId = $queuedPayment->getAssocId(); $institutionalSubscriptionDao =& DAORegistry::getDAO('InstitutionalSubscriptionDAO'); $individualSubscriptionDao =& DAORegistry::getDAO('IndividualSubscriptionDAO'); if ($institutionalSubscriptionDao->subscriptionExists($subscriptionId)) { $subscription =& $institutionalSubscriptionDao->getSubscription($subscriptionId); $institutional = true; } else { $subscription =& $individualSubscriptionDao->getSubscription($subscriptionId); $institutional = false; } if (!$subscription || $subscription->getUserId() != $queuedPayment->getUserId() || $subscription->getJournalId() != $queuedPayment->getJournalId()) { // FIXME: Is this supposed to be here? error_log(print_r($subscription, true)); return false; } // Update subscription end date now that payment is completed if ($institutional) { // Still requires approval from JM/SM since includes domain and IP ranges import('classes.subscription.InstitutionalSubscription'); $subscription->setStatus(SUBSCRIPTION_STATUS_NEEDS_APPROVAL); if ($subscription->isNonExpiring()) { $institutionalSubscriptionDao->updateSubscription($subscription); } else { $institutionalSubscriptionDao->renewSubscription($subscription); } // Notify JM/SM of completed online purchase $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); if ($journalSettingsDao->getSetting($subscription->getJournalId(), 'enableSubscriptionOnlinePaymentNotificationPurchaseInstitutional')) { import('classes.subscription.SubscriptionAction'); SubscriptionAction::sendOnlinePaymentNotificationEmail($subscription, 'SUBSCRIPTION_PURCHASE_INSTL'); } } else { import('classes.subscription.IndividualSubscription'); $subscription->setStatus(SUBSCRIPTION_STATUS_ACTIVE); if ($subscription->isNonExpiring()) { $individualSubscriptionDao->updateSubscription($subscription); } else { $individualSubscriptionDao->renewSubscription($subscription); } // Notify JM/SM of completed online purchase $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); if ($journalSettingsDao->getSetting($subscription->getJournalId(), 'enableSubscriptionOnlinePaymentNotificationPurchaseIndividual')) { import('classes.subscription.SubscriptionAction'); SubscriptionAction::sendOnlinePaymentNotificationEmail($subscription, 'SUBSCRIPTION_PURCHASE_INDL'); } } $returner = true; break; case PAYMENT_TYPE_RENEW_SUBSCRIPTION: $subscriptionId = $queuedPayment->getAssocId(); $institutionalSubscriptionDao =& DAORegistry::getDAO('InstitutionalSubscriptionDAO'); if ($institutionalSubscriptionDao->subscriptionExists($subscriptionId)) { $subscription =& $institutionalSubscriptionDao->getSubscription($subscriptionId); $institutional = true; } else { $individualSubscriptionDao =& DAORegistry::getDAO('IndividualSubscriptionDAO'); $subscription =& $individualSubscriptionDao->getSubscription($subscriptionId); $institutional = false; } if (!$subscription || $subscription->getUserId() != $queuedPayment->getUserId() || $subscription->getJournalId() != $queuedPayment->getJournalId()) { // FIXME: Is this supposed to be here? error_log(print_r($subscription, true)); return false; } if ($institutional) { $institutionalSubscriptionDao->renewSubscription($subscription); // Notify JM/SM of completed online purchase $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); if ($journalSettingsDao->getSetting($subscription->getJournalId(), 'enableSubscriptionOnlinePaymentNotificationRenewInstitutional')) { import('classes.subscription.SubscriptionAction'); SubscriptionAction::sendOnlinePaymentNotificationEmail($subscription, 'SUBSCRIPTION_RENEW_INSTL'); } } else { $individualSubscriptionDao->renewSubscription($subscription); // Notify JM/SM of completed online purchase $journalSettingsDao =& DAORegistry::getDAO('JournalSettingsDAO'); if ($journalSettingsDao->getSetting($subscription->getJournalId(), 'enableSubscriptionOnlinePaymentNotificationRenewIndividual')) { import('classes.subscription.SubscriptionAction'); SubscriptionAction::sendOnlinePaymentNotificationEmail($subscription, 'SUBSCRIPTION_RENEW_INDL'); } } $returner = true; break; case PAYMENT_TYPE_FASTTRACK: $articleDao =& DAORegistry::getDAO('ArticleDAO'); $article =& $articleDao->getArticle($queuedPayment->getAssocId(), $queuedPayment->getJournalId()); $article->setFastTracked(true); $articleDao->updateArticle($article); $returner = true; break; case PAYMENT_TYPE_GIFT: $giftId = $queuedPayment->getAssocId(); $giftDao =& DAORegistry::getDAO('GiftDAO'); $gift =& $giftDao->getGift($giftId); if (!$gift) { return false; } $journalDao =& DAORegistry::getDAO('JournalDAO'); $journalId = $gift->getAssocId(); $journal =& $journalDao->getById($journalId); if (!$journal) { return false; } // Check if user account corresponding to recipient email exists in the system $userDao =& DAORegistry::getDAO('UserDAO'); $roleDao =& DAORegistry::getDAO('RoleDAO'); $recipientFirstName = $gift->getRecipientFirstName(); $recipientEmail = $gift->getRecipientEmail(); $newUserAccount = false; if ($userDao->userExistsByEmail($recipientEmail)) { // User already has account, check if enrolled as reader in journal $user =& $userDao->getUserByEmail($recipientEmail); $userId = $user->getId(); if (!$roleDao->userHasRole($journalId, $userId, ROLE_ID_READER)) { // User not enrolled as reader, enroll as reader $role = new Role(); $role->setJournalId($journalId); $role->setUserId($userId); $role->setRoleId(ROLE_ID_READER); $roleDao->insertRole($role); } } else { // User does not have an account. Create one and enroll as reader. $recipientLastName = $gift->getRecipientLastName(); $username = Validation::suggestUsername($recipientFirstName, $recipientLastName); $password = Validation::generatePassword(); $user = new User(); $user->setUsername($username); $user->setPassword(Validation::encryptCredentials($username, $password)); $user->setFirstName($recipientFirstName); $user->setMiddleName($gift->getRecipientMiddleName()); $user->setLastName($recipientLastName); $user->setEmail($recipientEmail); $user->setDateRegistered(Core::getCurrentDate()); $userDao->insertUser($user); $userId = $user->getId(); $role = new Role(); $role->setJournalId($journalId); $role->setUserId($userId); $role->setRoleId(ROLE_ID_READER); $roleDao->insertRole($role); $newUserAccount = true; } // Update gift status (make it redeemable) and add recipient user account reference import('classes.gift.Gift'); $gift->setStatus(GIFT_STATUS_NOT_REDEEMED); $gift->setRecipientUserId($userId); $giftDao->updateObject($gift); // Send gift available email to recipient, cc buyer $giftNoteTitle = $gift->getGiftNoteTitle(); $buyerFullName = $gift->getBuyerFullName(); $giftNote = $gift->getGiftNote(); $giftLocale = $gift->getLocale(); AppLocale::requireComponents(LOCALE_COMPONENT_APPLICATION_COMMON, $giftLocale); $giftDetails = $gift->getGiftName($giftLocale); $giftJournalName = $journal->getTitle($giftLocale); $giftContactSignature = $journal->getSetting('contactName'); import('classes.mail.MailTemplate'); $mail = new MailTemplate('GIFT_AVAILABLE', $giftLocale); $mail->setFrom($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $mail->assignParams(array('giftJournalName' => $giftJournalName, 'giftNoteTitle' => $giftNoteTitle, 'recipientFirstName' => $recipientFirstName, 'buyerFullName' => $buyerFullName, 'giftDetails' => $giftDetails, 'giftNote' => $giftNote, 'giftContactSignature' => $giftContactSignature)); $mail->addRecipient($recipientEmail, $user->getFullName()); $mail->addCc($gift->getBuyerEmail(), $gift->getBuyerFullName()); $mail->send(); unset($mail); // Send gift login details to recipient $params = array('giftJournalName' => $giftJournalName, 'recipientFirstName' => $recipientFirstName, 'buyerFullName' => $buyerFullName, 'giftDetails' => $giftDetails, 'giftUrl' => $request->url($journal->getPath(), 'user', 'gifts'), 'username' => $user->getUsername(), 'giftContactSignature' => $giftContactSignature); if ($newUserAccount) { $mail = new MailTemplate('GIFT_USER_REGISTER', $giftLocale); $params['password'] = $password; } else { $mail = new MailTemplate('GIFT_USER_LOGIN', $giftLocale); } $mail->setFrom($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $mail->assignParams($params); $mail->addRecipient($recipientEmail, $user->getFullName()); $mail->send(); unset($mail); $returner = true; break; case PAYMENT_TYPE_PURCHASE_ARTICLE: case PAYMENT_TYPE_PURCHASE_ISSUE: case PAYMENT_TYPE_DONATION: case PAYMENT_TYPE_SUBMISSION: case PAYMENT_TYPE_PUBLICATION: $returner = true; break; default: // Invalid payment type assert(false); } } $completedPaymentDao =& DAORegistry::getDAO('OJSCompletedPaymentDAO'); $completedPayment =& $this->createCompletedPayment($queuedPayment, $payMethodPluginName); $completedPaymentDao->insertCompletedPayment($completedPayment); $queuedPaymentDao =& DAORegistry::getDAO('QueuedPaymentDAO'); $queuedPaymentDao->deleteQueuedPayment($queuedPayment->getQueuedPaymentId()); return $returner; }
/** * Become a given role. * @param $args array * @param $request PKPRequest */ function become($args, $request) { parent::validate(true); $journal = $request->getJournal(); $user = $request->getUser(); switch (array_shift($args)) { case 'author': $roleId = ROLE_ID_AUTHOR; $setting = 'allowRegAuthor'; $deniedKey = 'user.noRoles.submitArticleRegClosed'; break; case 'reviewer': $roleId = ROLE_ID_REVIEWER; $setting = 'allowRegReviewer'; $deniedKey = 'user.noRoles.regReviewerClosed'; break; default: $request->redirect(null, null, 'index'); } if ($journal->getSetting($setting)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setRoleId($roleId); $role->setUserId($user->getId()); $roleDao = DAORegistry::getDAO('RoleDAO'); $roleDao->insertRole($role); $request->redirectUrl($request->getUserVar('source')); } else { $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('message', $deniedKey); return $templateMgr->display('common/message.tpl'); } }
function enroll($args) { $articleId = isset($args[0]) ? (int) $args[0] : 0; $this->validate($articleId, SECTION_EDITOR_ACCESS_REVIEW); $journal =& Request::getJournal(); $submission =& $this->submission; $roleDao =& DAORegistry::getDAO('RoleDAO'); $roleId = $roleDao->getRoleIdFromPath('reviewer'); $users = Request::getUserVar('users'); if (!is_array($users) && Request::getUserVar('userId') != null) { $users = array(Request::getUserVar('userId')); } // Enroll reviewer for ($i = 0; $i < count($users); $i++) { if (!$roleDao->roleExists($journal->getId(), $users[$i], $roleId)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($users[$i]); $role->setRoleId($roleId); $roleDao->insertRole($role); } } Request::redirect(null, null, 'selectReviewer', $articleId); }
/** * Register a new user. * @return userId int * Last modified: EL on February 22th 2013 */ function execute() { $userDao =& DAORegistry::getDAO('UserDAO'); $user = new User(); $user->setSalutation($this->getData('salutation')); $user->setFirstName($this->getData('firstName')); $user->setMiddleName($this->getData('middleName')); $user->setLastName($this->getData('lastName')); $user->setGender($this->getData('gender')); $user->setInitials($this->getData('initials')); $user->setAffiliation($this->getData('affiliation'), null); // Localized $user->setEmail($this->getData('email')); $user->setUrl($this->getData('userUrl')); $user->setPhone($this->getData('phone')); $user->setFax($this->getData('fax')); $user->setMailingAddress($this->getData('mailingAddress')); $user->setCountry($this->getData('country')); $user->setBiography($this->getData('biography'), null); // Localized $user->setGossip($this->getData('gossip'), null); // Localized $user->setMustChangePassword($this->getData('mustChangePassword') ? 1 : 0); $authDao =& DAORegistry::getDAO('AuthSourceDAO'); $auth =& $authDao->getDefaultPlugin(); $user->setAuthId($auth ? $auth->getAuthId() : 0); $site =& Request::getSite(); $availableLocales = $site->getSupportedLocales(); $locales = array(); foreach ($this->getData('userLocales') as $locale) { if (Locale::isLocaleValid($locale) && in_array($locale, $availableLocales)) { array_push($locales, $locale); } } $user->setLocales($locales); $user->setUsername($this->getData('username')); $password = Validation::generatePassword(); $sendNotify = $this->getData('sendNotify'); if (isset($auth)) { $user->setPassword($password); // FIXME Check result and handle failures $auth->doCreateUser($user); $user->setAuthId($auth->authId); $user->setPassword(Validation::encryptCredentials($user->getId(), Validation::generatePassword())); // Used for PW reset hash only } else { $user->setPassword(Validation::encryptCredentials($this->getData('username'), $password)); } $user->setDateRegistered(Core::getCurrentDate()); $userId = $userDao->insertUser($user); // Add reviewing interests to interests table $interestDao =& DAORegistry::getDAO('InterestDAO'); $interests = is_array(Request::getUserVar('interestsKeywords')) ? Request::getUserVar('interestsKeywords') : array(); if (is_array($interests)) { $interests = array_map('urldecode', $interests); // The interests are coming in encoded -- Decode them for DB storage $interestTextOnly = Request::getUserVar('interests'); if (!empty($interestsTextOnly)) { // If JS is disabled, this will be the input to read $interestsTextOnly = explode(",", $interestTextOnly); } else { $interestsTextOnly = null; } if ($interestsTextOnly && !isset($interests)) { $interests = $interestsTextOnly; } elseif (isset($interests) && !is_array($interests)) { $interests = array($interests); } $interestDao->insertInterests($interests, $user->getId(), true); } $interestDao->insertInterests($interests, $user->getId(), true); $roleDao =& DAORegistry::getDAO('RoleDAO'); $journal =& Request::getJournal(); $ercStatus = $this->getData('ercStatus'); if ($ercStatus == "Secretary") { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId(ROLE_ID_SECTION_EDITOR); $roleDao->insertRole($role); $sectionEditorsDao =& DAORegistry::getDAO('SectionEditorsDAO'); $sectionEditorsDao->insertEditor($journal->getId(), $this->sectionId, $userId, 1, 1); } elseif ($ercStatus == "Chair" || $ercStatus == "Vice-Chair" || $ercStatus == "Member") { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($userId); $role->setRoleId(ROLE_ID_REVIEWER); $roleDao->insertRole($role); $ercReviewersDao =& DAORegistry::getDAO('ErcReviewersDAO'); if ($ercStatus == "Chair") { $ercReviewersDao->insertReviewer($journal->getId(), $this->sectionId, $userId, 1); } elseif ($ercStatus == "Vice-Chair") { $ercReviewersDao->insertReviewer($journal->getId(), $this->sectionId, $userId, 2); } if ($ercStatus == "Member") { $ercReviewersDao->insertReviewer($journal->getId(), $this->sectionId, $userId, 3); } } if ($sendNotify) { $sectionDao =& DAORegistry::getDAO('SectionDAO'); $erc =& $sectionDao->getSection($this->sectionId); $thisUser =& Request::getUser(); // Send welcome email to user import('classes.mail.MailTemplate'); $mail = new MailTemplate('COMMITTEE_REGISTER'); $mail->setFrom($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $mail->assignParams(array('username' => $this->getData('username'), 'password' => $password, 'userFullName' => $user->getFullName(), 'ercStatus' => $ercStatus, 'ercTitle' => $erc->getLocalizedTitle(), 'editProfile' => Request::url(null, 'user', 'profile'), 'secretaryFullName' => $thisUser->getFullName(), 'secretaryFunctions' => $thisUser->getErcFunction($this->sectionId))); $mail->addRecipient($user->getEmail(), $user->getFullName()); $mail->send(); } return $userId; }
/** * Do the actual web SOAP service request. * @param $token string * @param $authToken string The token returned from _doAuthenticate * @return boolean|string True for success, an error message otherwise. */ function _doUserRequest($token, $authToken) { // Build the multipart SOAP message from scratch. $soapMessage = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.avectra.com/2005/"> <soapenv:Header> <ns:AuthorizationToken> <ns:Token>' . $authToken . '</ns:Token> </ns:AuthorizationToken> </soapenv:Header> <soapenv:Body> <ns:BNEGetIndividualInformation> <ns:SSOToken>' . $token . '</ns:SSOToken> </ns:BNEGetIndividualInformation> </soapenv:Body> </soapenv:Envelope>'; // Prepare HTTP session. $curlCh = curl_init(); curl_setopt($curlCh, CURLOPT_RETURNTRANSFER, true); curl_setopt($curlCh, CURLOPT_POST, true); // Set up SSL. curl_setopt($curlCh, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curlCh, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // Make SOAP request. $ofrPlugin =& $this->_getObjectsForReviewPlugin(); $journal =& Request::getJournal(); curl_setopt($curlCh, CURLOPT_URL, $ofrPlugin->getSetting($journal->getId(), 'anthroNetSoapURL')); $extraHeaders = array('Host: avectra.aaanet.org', 'SOAPAction: "http://www.avectra.com/2005/BNEGetIndividualInformation"', 'Content-Type: text/xml;charset=UTF-8'); curl_setopt($curlCh, CURLOPT_HTTPHEADER, $extraHeaders); curl_setopt($curlCh, CURLOPT_POSTFIELDS, $soapMessage); $result = true; $response = curl_exec($curlCh); // We do not localize our error messages as they are all // fatal errors anyway and must be analyzed by technical staff. if ($response === false) { $result = 'OJS-OFR: Expected string response.'; } if ($result === true && ($status = curl_getinfo($curlCh, CURLINFO_HTTP_CODE)) != OFR_WS_RESPONSE_OK) { $result = 'OJS-OFR: Expected ' . OFR_WS_RESPONSE_OK . ' response code, got ' . $status . ' instead.'; } curl_close($curlCh); // Check SOAP response by simple string manipulation rather // than instantiating a DOM. if (is_string($response)) { $request = Application::getRequest(); /** * The XML returned looks something like this: * * <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> * <soap:Header><AuthorizationToken xmlns="http://www.avectra.com/2005/"><Token>2a51ca85-d490-4444-802c-d247259d674a</Token></AuthorizationToken></soap:Header> * <soap:Body> * <BNEGetIndividualInformationResponse xmlns="http://www.avectra.com/2005/"> * <BNEGetIndividualInformationResult> * <Individual xmlns=""> * <ind_cst_key>2a51ca85-d490-9999-802c-d24XX59d674a</ind_cst_key> * <cst_recno>000001</cst_recno> * <ind_first_name>John</ind_first_name> * <ind_last_name>Public</ind_last_name> * <cst_eml_address_dn>user@email.com</cst_eml_address_dn> * <InterestCodes><InterestCode>Art and Material Culture</InterestCode></InterestCodes> * </Individual> * </BNEGetIndividualInformationResult> * </BNEGetIndividualInformationResponse> * </soap:Body> * </soap:Envelope> */ $matches = array(); if (!preg_match('#<faultstring>([^<]*)</faultstring>#', $response)) { // Ensure that the user is logged into the AnthroNet portal. if (preg_match('#<ind_cst_key>00000000\\-0000\\-0000\\-0000\\-000000000000</ind_cst_key>#', $response)) { $request->redirect(null, 'user'); } else { $email = $firstName = $lastName = $interestCodes = null; $interestCodesArray = array(); if (preg_match('#<cst_eml_address_dn>(.*?)</cst_eml_address_dn>#', $response, $matches)) { $email = $matches[1]; } if (preg_match('#<ind_first_name>(.*?)</ind_first_name>#', $response, $matches)) { $firstName = $matches[1]; } if (preg_match('#<ind_last_name>(.*?)</ind_last_name>#', $response, $matches)) { $lastName = $matches[1]; } if (preg_match('#<InterestCodes>(.*?)</InterestCodes>#', $response, $matches)) { $interestCodes = $matches[1]; preg_match_all('#<InterestCode>(.*?)</InterestCode>#', $interestCodes, $matches, PREG_PATTERN_ORDER); if (is_array($matches[1])) { $interestCodesArray = $matches[1]; } } $userDao =& DAORegistry::getDAO('UserDAO'); // see if this user exists already. $user = $userDao->getUserByEmail($email); if (!$user) { $user = new User(); $userName = Validation::suggestUsername($firstName, $lastName); $user->setUsername($userName); $user->setFirstName($firstName); $user->setLastName($lastName); $user->setEmail($email); $user->setDateRegistered(Core::getCurrentDate()); $locales = array('en_US'); $user->setLocales($locales); $user->setPassword(Validation::encryptCredentials($userName, Validation::generatePassword())); $userDao->insertUser($user); } import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $interestManager->setInterestsForUser($user, $interestCodesArray); // enroll as Author, if not already. $roleDao =& DAORegistry::getDAO('RoleDAO'); if (!$roleDao->userHasRole($journal->getId(), $user->getId(), ROLE_ID_AUTHOR)) { $role = new Role(); $role->setJournalId($journal->getId()); $role->setUserId($user->getId()); $role->setRoleId(ROLE_ID_AUTHOR); $roleDao->insertRole($role); } return $user; } } else { $result = 'OFR: ' . $status . ' - ' . $matches[1]; } } else { $result = 'OJS-OFR: Expected string response.'; } return false; }