/**
  * 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;
 }