public function signup(array $data)
 {
     $response = new Response();
     if (empty($data)) {
         $response->setContent($this->app->trans('UNKNOWN_ERROR'));
         return false;
     }
     $constraints = new Assert\Collection(array('username' => array(new Assert\NotBlank(array('message' => 'FILL_ALL_FIELDS')), new Assert\Length(array('min' => 4)), new Assert\Length(array('max' => 15))), 'password' => array(new Assert\NotBlank(array('message' => 'FILL_ALL_FIELDS')), new Assert\Length(array('min' => 4))), 'confirm' => array(new Assert\NotBlank(array('message' => 'FILL_ALL_FIELDS')), new Assert\Length(array('min' => 4))), 'email' => array(new Assert\NotBlank(array('message' => 'FILL_ALL_FIELDS')), new Assert\Email(array('message' => 'INVALID_EMAIL'))), 'terms' => array(new Assert\NotBlank(array('message' => 'FILL_ALL_FIELDS')))));
     $errors = $this->app['validator']->validateValue($data, $constraints);
     if (count($errors) > 0) {
         $response->setStatusCode(400);
         $response->setContent($this->app->trans($errors[0]->getMessage()));
         return $response;
     }
     if ($data['password'] !== $data['confirm']) {
         $response->setStatusCode(400);
         $response->setContent($this->app->trans('PASSWORDS_DONT_MATCH'));
         return $response;
     }
     $check_username = $this->app['db']->fetchColumn('SELECT username FROM users WHERE username=? LIMIT 1', array($data['username']));
     if ($check_username) {
         $response->setStatusCode(400);
         $response->setContent($this->app->trans('USERNAME_TAKEN'));
         return $response;
     }
     $check_email = $this->app['db']->fetchColumn('SELECT email FROM users WHERE email=? LIMIT 1', array($data['email']));
     if ($check_email) {
         $response->setStatusCode(400);
         $response->setContent($this->app->trans('EMAIL_REGISTERED'));
         return $response;
     }
     $hashed = $this->hash($this->app['defaults']['salt'] . $data['password']);
     $default_group = $this->app['db']->fetchColumn('SELECT id FROM groups WHERE `default`=1 LIMIT 1');
     $insert = $this->app['db']->insert('users', array('username' => $data['username'], 'password' => $hashed, 'email' => $data['email'], 'ip' => $_SERVER['REMOTE_ADDR'], 'perm_group' => $default_group, 'regdate' => time(), 'lastActive' => time()));
     if (!$insert) {
         $response->setStatusCode(500);
         $response->setContent($this->app->trans('UNKNOWN_ERROR'));
         return $response;
     }
     $user_id = $this->app['db']->lastInsertId();
     $this->app['db']->insert('profiles', array('id' => $user_id));
     if ($this->app['board']['confirmEmail']) {
         \ASF\Mailer::setTemplate('emailConfirmation', array('username' => $data['username'], 'boardTitle' => $this->app['board']['name'], 'boardUrl' => $this->app['board']['url'], 'confirmCode' => base64_encode($data['email'] . '-' . $user_id)));
         \ASF\Mailer::send($data['email'], $this->app['email']['noReply'], 'Email confirmation');
         $response->setStatusCode(200);
         $response->setContent($this->app->trans('ACCOUNT_CREATED_CONFIRM_EMAIL'));
     } else {
         $response->setStatusCode(200);
         $resopnse->setContent($this->app->trans('ACCOUNT_CREATED'));
     }
     return $response;
 }
 public function testCompile()
 {
     \ASF\Mailer::setTemplate('test', array('name' => 'Carl'));
     \ASF\Mailer::compile();
     $this->assertEquals(\ASF\Mailer::$template, 'Carl');
 }