user =& $user; $site =& Request::getSite(); // Validation checks for this form $this->addCheck(new FormValidator($this, 'firstName', 'required', 'user.profile.form.firstNameRequired')); $this->addCheck(new FormValidator($this, 'lastName', 'required', 'user.profile.form.lastNameRequired')); $this->addCheck(new FormValidatorUrl($this, 'userUrl', 'optional', 'user.profile.form.urlInvalid')); $this->addCheck(new FormValidatorEmail($this, 'email', 'required', 'user.profile.form.emailRequired')); $this->addCheck(new FormValidatorORCID($this, 'orcid', 'optional', 'user.profile.form.orcidInvalid')); $this->addCheck(new FormValidatorCustom($this, 'email', 'required', 'user.register.form.emailExists', array(DAORegistry::getDAO('UserDAO'), 'userExistsByEmail'), array($user->getId(), true), true)); $this->addCheck(new FormValidatorPost($this)); } /** * Deletes a profile image. */ function deleteProfileImage() { $user =& Request::getUser(); $profileImage = $user->getSetting('profileImage'); if (!$profileImage) return false; import('classes.file.PublicFileManager'); $fileManager = new PublicFileManager(); if ($fileManager->removeSiteFile($profileImage['uploadName'])) { return $user->updateSetting('profileImage', null); } else { return false; } } function uploadProfileImage() { import('classes.file.PublicFileManager'); $fileManager = new PublicFileManager(); $user =& $this->user; $type = $fileManager->getUploadedFileType('profileImage'); $extension = $fileManager->getImageExtension($type); if (!$extension) return false; $uploadName = 'profileImage-' . (int) $user->getId() . $extension; if (!$fileManager->uploadSiteFile('profileImage', $uploadName)) return false; $filePath = $fileManager->getSiteFilesPath(); list($width, $height) = getimagesize($filePath . '/' . $uploadName); if ($width > 150 || $height > 150 || $width <= 0 || $height <= 0) { $userSetting = null; $user->updateSetting('profileImage', $userSetting); $fileManager->removeSiteFile($filePath); return false; } $userSetting = array( 'name' => $fileManager->getUploadedFileName('profileImage'), 'uploadName' => $uploadName, 'width' => $width, 'height' => $height, 'dateUploaded' => Core::getCurrentDate() ); $user->updateSetting('profileImage', $userSetting); return true; } /** * Display the form. */ function display() { $user =& Request::getUser(); $templateMgr =& TemplateManager::getManager(); $templateMgr->assign('username', $user->getUsername()); $site =& Request::getSite(); $templateMgr->assign('availableLocales', $site->getSupportedLocaleNames()); $roleDao =& DAORegistry::getDAO('RoleDAO'); $journalDao =& DAORegistry::getDAO('JournalDAO'); $userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); $journals =& $journalDao->getJournals(true); $journals =& $journals->toArray(); foreach ($journals as $thisJournal) { if ($thisJournal->getSetting('publishingMode') == PUBLISHING_MODE_SUBSCRIPTION && $thisJournal->getSetting('enableOpenAccessNotification')) { $templateMgr->assign('displayOpenAccessNotification', true); $templateMgr->assign_by_ref('user', $user); break; } } $templateMgr->assign('genderOptions', $userDao->getGenderOptions()); $journals =& $journalDao->getJournals(true); $journals =& $journals->toArray(); $countryDao =& DAORegistry::getDAO('CountryDAO'); $countries =& $countryDao->getCountries(); $templateMgr->assign_by_ref('journals', $journals); $templateMgr->assign_by_ref('countries', $countries); $templateMgr->assign_by_ref('journalNotifications', $journalNotifications); $templateMgr->assign('helpTopicId', 'user.registerAndProfile'); $journal =& Request::getJournal(); if ($journal) { $roleDao =& DAORegistry::getDAO('RoleDAO'); $roles =& $roleDao->getRolesByUserId($user->getId(), $journal->getId()); $roleNames = array(); foreach ($roles as $role) $roleNames[$role->getRolePath()] = $role->getRoleName(); $templateMgr->assign('allowRegReviewer', $journal->getSetting('allowRegReviewer')); $templateMgr->assign('allowRegAuthor', $journal->getSetting('allowRegAuthor')); $templateMgr->assign('allowRegReader', $journal->getSetting('allowRegReader')); $templateMgr->assign('roles', $roleNames); } $templateMgr->assign('profileImage', $user->getSetting('profileImage')); parent::display(); } function getLocaleFieldNames() { $userDao =& DAORegistry::getDAO('UserDAO'); return $userDao->getLocaleFieldNames(); } /** * Initialize form data from current settings. */ function initData(&$args, &$request) { $user =& $request->getUser(); import('lib.pkp.classes.user.InterestManager'); $interestManager = new InterestManager(); $this->_data = array( 'salutation' => $user->getSalutation(), 'firstName' => $user->getFirstName(), 'middleName' => $user->getMiddleName(), 'initials' => $user->getInitials(), 'lastName' => $user->getLastName(), 'gender' => $user->getGender(), 'affiliation' => $user->getAffiliation(null), // Localized 'signature' => $user->getSignature(null), // Localized 'email' => $user->getEmail(), 'orcid' => $user->getData('orcid'), 'userUrl' => $user->getUrl(), 'phone' => $user->getPhone(), 'fax' => $user->getFax(), 'mailingAddress' => $user->getMailingAddress(), 'country' => $user->getCountry(), 'biography' => $user->getBiography(null), // Localized 'userLocales' => $user->getLocales(), 'isAuthor' => Validation::isAuthor(), 'isReader' => Validation::isReader(), 'isReviewer' => Validation::isReviewer(), 'interestsKeywords' => $interestManager->getInterestsForUser($user), 'interestsTextOnly' => $interestManager->getInterestsString($user), ); } /** * Assign form data to user-submitted data. */ function readInputData() { $this->readUserVars(array( 'salutation', 'firstName', 'middleName', 'lastName', 'gender', 'initials', 'affiliation', 'signature', 'email', 'orcid', 'userUrl', 'phone', 'fax', 'mailingAddress', 'country', 'biography', 'keywords', 'interestsTextOnly', 'userLocales', 'readerRole', 'authorRole', 'reviewerRole' )); if ($this->getData('userLocales') == null || !is_array($this->getData('userLocales'))) { $this->setData('userLocales', array()); } $keywords = $this->getData('keywords'); if ($keywords != null && is_array($keywords['interests'])) { // The interests are coming in encoded -- Decode them for DB storage $this->setData('interestsKeywords', array_map('urldecode', $keywords['interests'])); } } /** * 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->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 // 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); $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); $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->getJournals(true); $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); } } } ?>