/**
* Gather all the data for creating a new user.
*
* @param string $mode
* @return string
*/
protected function _newUser($mode)
{
$userMap = Configure::read('Forum.userMap');
switch ($mode) {
case 'username':
$username = trim($this->in('<question>Username:</question>'));
if (!$username) {
$username = $this->_newUser($mode);
} else {
$result = $this->db->fetchRow(sprintf("SELECT COUNT(*) AS `count` FROM `%s` AS `User` WHERE `%s` = %s", $this->install['table'], $userMap['username'], $this->db->value($username)));
if ($this->db->hasResult() && $result[0]['count']) {
$this->out('<error>Username already exists, please try again</error>');
$username = $this->_newUser($mode);
}
}
return $username;
break;
case 'password':
$password = trim($this->in('<question>Password:</question>'));
if (!$password) {
$password = $this->_newUser($mode);
}
return $password;
break;
case 'email':
$email = trim($this->in('<question>Email:</question>'));
if (!$email) {
$email = $this->_newUser($mode);
} else {
if (!Validation::email($email)) {
$this->out('<error>Invalid email address, please try again</error>');
$email = $this->_newUser($mode);
} else {
$result = $this->db->fetchRow(sprintf("SELECT COUNT(*) AS `count` FROM `%s` AS `User` WHERE `%s` = %s", $this->install['table'], $userMap['email'], $this->db->value($email)));
if ($this->db->hasResult() && $result[0]['count']) {
$this->out('<error>Email already exists, please try again</error>');
$email = $this->_newUser($mode);
}
}
}
return $email;
break;
}
return null;
}