/**
  * Signup if not logged in
  *
  * @return void
  */
 public function indexAction()
 {
     $this->layout('layout/signup');
     $viewData = array();
     $signupForm = new SignupForm();
     $signupForm->setAttribute('action', $this->url()->fromRoute('users-signup'));
     $request = $this->getRequest();
     if ($request->isPost()) {
         $data = $request->getPost()->toArray();
         $signupForm->setInputFilter(User::getInputFilter());
         $signupForm->setData($data);
         if ($signupForm->isValid()) {
             $files = $request->getFiles()->toArray();
             $data = $signupForm->getData();
             $data['avatar'] = $files['avatar']['name'] != '' ? $files['avatar']['name'] : null;
             if ($data['avatar'] !== null) {
                 $size = new Size(array('max' => 2048000));
                 $isImage = new IsImage();
                 $filename = $data['avatar'];
                 $adapter = new \Zend\File\Transfer\Adapter\Http();
                 $adapter->setValidators(array($size, $isImage), $filename);
                 if (!$adapter->isValid($filename)) {
                     $errors = array();
                     foreach ($adapter->getMessages() as $key => $row) {
                         $errors[] = $row;
                     }
                     $signupForm->setMessages(array('avatar' => $errors));
                 }
                 $destPath = 'data/tmp/';
                 $adapter->setDestination($destPath);
                 $fileinfo = $adapter->getFileInfo();
                 preg_match('/.+\\/(.+)/', $fileinfo['avatar']['type'], $matches);
                 $newFilename = sprintf('%s.%s', sha1(uniqid(time(), true)), $matches[1]);
                 $adapter->addFilter('File\\Rename', array('target' => $destPath . $newFilename, 'overwrite' => true));
                 if ($adapter->receive($filename)) {
                     $data['avatar'] = base64_encode(file_get_contents($destPath . $newFilename));
                     if (file_exists($destPath . $newFilename)) {
                         unlink($destPath . $newFilename);
                     }
                 }
             }
             unset($data['repeat_password']);
             unset($data['csrf']);
             unset($data['register']);
             $response = ApiClient::registerUser($data);
             if ($response['result'] == true) {
                 $this->flashMessenger()->addMessage('Account created!');
                 return $this->redirect()->toRoute('wall', array('username' => $data['username']));
             }
         }
     }
     $viewData['signupForm'] = $signupForm;
     return $viewData;
 }
 /**
  * Create new user
  * 
  * 
  * @access public
  * @uses User
  * @uses UserForm
  * 
  * @return ViewModel
  */
 public function newAction()
 {
     $variables = array();
     $query = $this->getServiceLocator()->get('wrapperQuery')->setEntity('Users\\Entity\\User');
     $countriesService = $this->getServiceLocator()->get('losi18n-countries');
     $languagesService = $this->getServiceLocator()->get('losi18n-languages');
     $userModel = $this->getServiceLocator()->get('Users\\Model\\User');
     $userObj = new User();
     $options = array();
     $options['query'] = $query;
     $locale = "en";
     $options['countries'] = $countriesService->getAllCountries($locale);
     $options['languages'] = $languagesService->getAllLanguages($locale);
     $options['excludedRoles'] = array(Role::USER_ROLE);
     $auth = new AuthenticationService();
     $storage = $auth->getIdentity();
     if (!$auth->hasIdentity() || $auth->hasIdentity() && !in_array(Role::ADMIN_ROLE, $storage['roles'])) {
         $options['excludedRoles'][] = Role::ADMIN_ROLE;
     }
     $isAdminUser = false;
     if ($auth->hasIdentity() && in_array(Role::ADMIN_ROLE, $storage['roles'])) {
         $isAdminUser = true;
     }
     $form = new UserForm(null, $options);
     $request = $this->getRequest();
     if ($request->isPost()) {
         // Make certain to merge the files info!
         $fileData = $request->getFiles()->toArray();
         $data = array_merge_recursive($request->getPost()->toArray(), $fileData);
         $query->setEntity('Users\\Entity\\User');
         $form->setInputFilter($userObj->getInputFilter($query));
         $form->setData($data);
         $isCustomValidationValid = true;
         if ($data['email'] != $data['confirmEmail']) {
             $form->get('confirmEmail')->setMessages(array("email doesnt match"));
             $isCustomValidationValid = false;
         }
         if ($data['password'] != $data['confirmPassword']) {
             $form->get('confirmPassword')->setMessages(array("password doesnt match"));
             $isCustomValidationValid = false;
         }
         if ($form->isValid() && $isCustomValidationValid === true) {
             $userModel->saveUser($data, null, $isAdminUser);
             if ($isAdminUser) {
                 $url = $this->getEvent()->getRouter()->assemble(array('action' => 'index'), array('name' => 'users'));
                 $this->redirect()->toUrl($url);
             } else {
                 $variables['success'] = true;
             }
         }
     }
     $variables['userForm'] = $this->getFormView($form);
     $statement = new Statement();
     $variables['statements'] = $statement->statements;
     return new ViewModel($variables);
 }