Thanks for the feedback. Yep, definitely need to watch for typo’s . Happily I think I’ve got them all, however I still have the same problem. I’ve modified the code to work successfully for one field (that’s a textarea) and have simply followed the same process for the new field (which is a drop down list). As suggested I’ve included CreateAccountForm.inc.php. As I understand it, PKPUser.inc.php just contains the set and get functionality which I think is ok
As always, any help is most gratefully received.
<?php
/**
* @defgroup user_form
*/
/**
* @file CreateAccountForm.inc.php
*
* Copyright (c) 2000-2012 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class CreateAccountForm
* @ingroup user_form
*
* @brief Form for user account creation.
*
*/
// $Id$
import('form.Form');
class CreateAccountForm extends Form {
/** @var boolean user is already registered with another conference */
var $existingUser;
/** @var AuthPlugin default authentication source, if specified */
var $defaultAuth;
/** @var boolean whether or not captcha is enabled for this form */
var $captchaEnabled;
/**
* Constructor.
*/
function CreateAccountForm() {
parent::Form('user/createAccount.tpl');
$this->existingUser = Request::getUserVar('existingUser') ? 1 : 0;
import('captcha.CaptchaManager');
$captchaManager = new CaptchaManager();
$this->captchaEnabled = ($captchaManager->isEnabled() && Config::getVar('captcha', 'captcha_on_register'))?true:false;
// Validation checks for this form
$this->addCheck(new FormValidator($this, 'username', 'required', 'user.profile.form.usernameRequired'));
$this->addCheck(new FormValidator($this, 'password', 'required', 'user.profile.form.passwordRequired'));
if ($this->existingUser) {
// Existing user -- check login
$this->addCheck(new FormValidatorCustom($this, 'username', 'required', 'user.login.loginError', create_function('$username,$form', 'return Validation::checkCredentials($form->getData(\'username\'), $form->getData(\'password\'));'), array(&$this)));
} else {
// New user -- check required profile fields
$site =& Request::getSite();
$this->addCheck(new FormValidatorCustom($this, 'username', 'required', 'user.account.form.usernameExists', array(DAORegistry::getDAO('UserDAO'), 'userExistsByUsername'), array(), true));
$this->addCheck(new FormValidatorAlphaNum($this, 'username', 'required', 'user.account.form.usernameAlphaNumeric'));
$this->addCheck(new FormValidatorLength($this, 'password', 'required', 'user.account.form.passwordLengthTooShort', '>=', $site->getMinPasswordLength()));
$this->addCheck(new FormValidatorCustom($this, 'password', 'required', 'user.account.form.passwordsDoNotMatch', create_function('$password,$form', 'return $password == $form->getData(\'password2\');'), array(&$this)));
$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 FormValidator($this, 'affiliation', 'required', 'user.profile.form.affiliationRequired'));
$this->addCheck(new FormValidatorCustom($this, 'email', 'required', 'user.account.form.emailExists', array(DAORegistry::getDAO('UserDAO'), 'userExistsByEmail'), array(), true));
if ($this->captchaEnabled) {
$this->addCheck(new FormValidatorCaptcha($this, 'captcha', 'captchaId', 'common.captchaField.badCaptcha'));
}
$authDao =& DAORegistry::getDAO('AuthSourceDAO');
$this->defaultAuth =& $authDao->getDefaultPlugin();
if (isset($this->defaultAuth)) {
$this->addCheck(new FormValidatorCustom($this, 'username', 'required', 'user.account.form.usernameExists', create_function('$username,$form,$auth', 'return (!$auth->userExists($username) || $auth->authenticate($username, $form->getData(\'password\')));'), array(&$this, $this->defaultAuth)));
}
}
$this->addCheck(new FormValidatorPost($this));
}
/**
* Display the form.
*/
function display() {
$templateMgr =& TemplateManager::getManager();
$site =& Request::getSite();
$templateMgr->assign('minPasswordLength', $site->getMinPasswordLength());
$conference =& Request::getConference();
$schedConf =& Request::getSchedConf();
if ($this->captchaEnabled) {
import('captcha.CaptchaManager');
$captchaManager = new CaptchaManager();
$captcha =& $captchaManager->createCaptcha();
if ($captcha) {
$templateMgr->assign('captchaEnabled', $this->captchaEnabled);
$this->setData('captchaId', $captcha->getId());
}
}
$countryDao =& DAORegistry::getDAO('CountryDAO');
$countries =& $countryDao->getCountries();
$templateMgr->assign_by_ref('countries', $countries);
import('schedConf.SchedConfAction');
$userDao =& DAORegistry::getDAO('UserDAO');
$templateMgr->assign('genderOptions', $userDao->getGenderOptions());
$templateMgr->assign('privacyStatement', $conference->getLocalizedSetting('privacyStatement'));
$templateMgr->assign('enableOpenAccessNotification', $schedConf->getSetting('enableOpenAccessNotification')==1?1:0);
$templateMgr->assign('allowRegReader', SchedConfAction::allowRegReader($schedConf));
$templateMgr->assign('allowRegAuthor', SchedConfAction::allowRegAuthor($schedConf));
$templateMgr->assign('allowRegReviewer', SchedConfAction::allowRegReviewer($schedConf));
$templateMgr->assign('source', Request::getUserVar('source'));
$templateMgr->assign('pageHierarchy', array(
array(Request::url(null, 'index', 'index'), $conference->getConferenceTitle(), true),
array(Request::url(null, null, 'index'), $schedConf->getSchedConfTitle(), true)));
$site =& Request::getSite();
$templateMgr->assign('availableLocales', $site->getSupportedLocaleNames());
$templateMgr->assign('helpTopicId', 'conference.users.index');
// DM 06082015
// added as a hardcoded hack until the DAO stuff is implented
$prostudent = array("Student", "Professional");
$templateMgr->assign_by_ref('prostudent', $prostudent); // DM 28052015
$yesno = array("Yes", "No"); // DM 28052015
$templateMgr->assign_by_ref('yesno', $yesno); // DM 28052015
// added as a hardcoded hack until the DAO stuff is implented
$qualifications = array("Phd (or equivalent)",
"MD (or equivalent)",
"Masters (or equivalent)",
"Bachelor (or equivalent)",
"Student (N/A)"); // DM 28052015
$templateMgr->assign_by_ref('qualifications', $qualifications);
parent::display();
}
function getLocaleFieldNames() {
$userDao =& DAORegistry::getDAO('UserDAO');
return $userDao->getLocaleFieldNames();
}
/**
* Initialize default data.
*/
function initData() {
$this->setData('createAsReader', 1);
/**if (Request::getUserVar('requiresAuthor')) $this->setData('createAsAuthor', 1);*/
$this->setData('existingUser', $this->existingUser);
$this->setData('userLocales', array());
$this->setData('sendPassword', 1);
}
/**
* Assign form data to user-submitted data.
*/
function readInputData() {
// DM 04072015 - added authdept
$userVars = array(
'username', 'password', 'password2',
'salutation', 'firstName', 'middleName', 'lastName',
'gender', 'initials', 'country',
'affiliation', 'email', 'userUrl', 'phone', 'fax', 'signature',
'mailingAddress', 'biography', 'department', 'newdesignation', 'submissionsquestion1', 'submissionsquestion2', 'interests', 'userLocales',
'createAsReader', 'openAccessNotification', 'createAsAuthor',
'createAsReviewer', 'existingUser', 'sendPassword' //DM 06082015
);
if ($this->captchaEnabled) {
$userVars[] = 'captchaId';
$userVars[] = 'captcha';
}
$this->readUserVars($userVars);
if ($this->getData('userLocales') == null || !is_array($this->getData('userLocales'))) {
$this->setData('userLocales', array());
}
if ($this->getData('username') != null) {
// Usernames must be lowercase
$this->setData('username', strtolower($this->getData('username')));
}
}
/**
* Send the registration confirmation email.
* @param $user object
*/
function sendConfirmationEmail($user, $password, $sendPassword) {
$schedConf =& Request::getSchedConf();
import('mail.MailTemplate');
if (Config::getVar('email', 'require_validation')) {
// Create an access key
import('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($schedConf->getSetting('contactEmail'), $schedConf->getSetting('contactName'));
$mail->assignParams(array(
'userFullName' => $user->getFullName(),
'activateUrl' => Request::url(null, null, 'user', 'activateUser', array($user->getUsername(), $accessKey))
));
$mail->addRecipient($user->getEmail(), $user->getFullName());
$mail->send();
unset($mail);
}
if ($sendPassword) {
// Send welcome email to user
$mail = new MailTemplate('USER_REGISTER');
$mail->setFrom($schedConf->getSetting('contactEmail'), $schedConf->getSetting('contactName'));
$mail->assignParams(array(
'username' => $user->getUsername(),
'password' => String::substr($password, 0, 30), // Prevent mailer abuse via long passwords
));
$mail->addRecipient($user->getEmail(), $user->getFullName());
$mail->send();
unset($mail);
}
}
/**
* Register a new user.
*/
function execute() {
$requireValidation = Config::getVar('email', 'require_validation');
if ($this->existingUser) {
// Existing user in the system
$userDao =& DAORegistry::getDAO('UserDAO');
$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'));
$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->setDepartment($this->getData('department'), null); // Localized
$user->setNewdesignation($this->getData('newdesignation'), null); // Localized
$user->setSubmissionsQuestion1($this->getData('submissionsquestion1'),null); //DM 06082015
$user->setSubmissionsQuestion2($this->getData('submissionsquestion2'), null); //DM 06082015
$user->setInterests($this->getData('interests'), 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 (AppLocale::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(__('user.login.accountNotValidated'));
}
$userDao =& DAORegistry::getDAO('UserDAO');
$userDao->insertUser($user);
$userId = $user->getId();
if (!$userId) {
return false;
}
$sessionManager =& SessionManager::getManager();
$session =& $sessionManager->getUserSession();
$session->setSessionVar('username', $user->getUsername());
}
$conference =& Request::getConference();
$schedConf =& Request::getSchedConf();
$roleDao =& DAORegistry::getDAO('RoleDAO');
// Roles users are allowed to register themselves in
$allowedRoles = array('reader' => 'createAsReader', 'author' => 'createAsAuthor', 'reviewer' => 'createAsReviewer');
import('schedConf.SchedConfAction');
if (!SchedConfAction::allowRegReader($schedConf)) {
unset($allowedRoles['reader']);
}
if (!SchedConfAction::allowRegAuthor($schedConf)) {
unset($allowedRoles['author']);
}
if (!SchedConfAction::allowRegReviewer($schedConf)) {
unset($allowedRoles['reviewer']);
}
foreach ($allowedRoles as $k => $v) {
$roleId = $roleDao->getRoleIdFromPath($k);
if ($this->getData($v) && !$roleDao->roleExists($conference->getId(), $schedConf->getId(), $userId, $roleId)) {
$role = new Role();
$role->setConferenceId($conference->getId());
$role->setSchedConfId($schedConf->getId());
$role->setUserId($userId);
$role->setRoleId($roleId);
$roleDao->insertRole($role);
}
}
if (!$this->existingUser) {
$this->sendConfirmationEmail($user, $this->getData('password'), $this->getData('sendPassword'));
}
if (isset($allowedRoles['reader']) && $this->getData('openAccessNotification')) {
$userSettingsDao =& DAORegistry::getDAO('UserSettingsDAO');
$userSettingsDao->updateSetting($userId, 'openAccessNotification', true, 'bool', $conference->getId());
}
}
}
?>