/** * Register a new user * @param array $params * @param string $captcha_info * @param Website $website * @param DeliveryInterface $delivery * @throws \Exception * @return string $userId */ public static function register($params, $captcha_info, $website, DeliveryInterface $delivery = null) { if (strtolower($captcha_info['code']) != strtolower($params['captcha'])) { return false; // captcha does not match } $user = new UserModel(); JsonDecoder::decode($user, $params); UserCommands::assertUniqueIdentity($user, $params['username'], $params['email'], $website); $user->active = false; $user->role = SystemRoles::USER; $user->siteRole[$website->domain] = $website->userDefaultSiteRole; if (!$user->emailPending) { if (!$user->email) { throw new \Exception("Error: no email set for user signup."); } $user->emailPending = $user->email; $user->email = ''; } $userId = $user->write(); // Write the password $userPassword = new UserModelWithPassword($userId); $userPassword->setPassword($params['password']); $userPassword->write(); // if website has a default project then add them to that project $project = ProjectModel::getDefaultProject($website); if ($project) { $project->addUser($user->id->asString(), ProjectRoles::CONTRIBUTOR); $user->addProject($project->id->asString()); $project->write(); $user->write(); } Communicate::sendSignup($user, $website, $delivery); return $userId; }