Exemplo n.º 1
0
 /**
  * Updating user
  * 
  * @param sfWebRequest $request
  * @return string - json
  * @author Sergey Startsev
  */
 public function executeUpdate(sfWebRequest $request)
 {
     $response = afResponseHelper::create();
     $sUsername = $request->getParameter('username');
     $aUser = json_decode($request->getParameter('user'), true);
     // Will be passed if user - admin or he trying update his own profile
     if (!afStudioUser::getInstance()->isAdmin() && afStudioUser::getInstance()->getUsername() != $sUsername) {
         $this->forward404("You have no rights to execute this action");
     }
     // Retrieve user via username
     $user = afStudioUser::retrieve($sUsername);
     $errors = array();
     if (!$user) {
         return $this->renderJson($response->success(false)->message("This user doesn't exists")->asArray());
     }
     $aUserCheck = afStudioUser::retrieveByEmail($aUser['email']);
     if ($aUserCheck && $aUserCheck['username'] != $aUser['username']) {
         $aErrors['email'] = "User with this `email` already exists";
     }
     $aUpdate = array(afStudioUser::FIRST_NAME => $aUser['first_name'], afStudioUser::LAST_NAME => $aUser['last_name'], afStudioUser::EMAIL => $aUser['email']);
     if (isset($aUser['role'])) {
         $aUpdate[afStudioUser::ROLE] = $aUser['role'];
     }
     if (!empty($aUser['password'])) {
         $aUpdate[afStudioUser::PASSWORD] = $aUser['password'];
     }
     // Validate user data
     $validate = afStudioUser::validate($aUpdate);
     if (is_bool($validate) && $validate === true && empty($aErrors)) {
         // if password has been setted encoding using rule
         if (!empty($aUser['password'])) {
             $aUpdate[afStudioUser::PASSWORD] = afStudioUser::passwordRule($aUser['password']);
         }
         // Update processing
         afStudioUser::update($sUsername, $aUpdate);
         afsNotificationPeer::log('User has been successfully updated', 'afStudioUser');
         // if changes applied for current user
         if (afStudioUser::getInstance()->getUsername() == $sUsername) {
             if (!empty($aUser['password'])) {
                 afStudioUser::set($sUsername, $aUser['password'], false);
             }
             // update role of current user - with redirect processing
             if (afStudioUser::getInstance()->getRole() != $aUser['role']) {
                 return $this->renderJson($response->redirect('afsAuthorize/signout')->asArray());
             }
         }
         $response->success(true)->message('User has been successfully updated');
     } else {
         if (is_array($validate)) {
             $aErrors = afsUserManagerHelper::mergeErrors($aErrors, $validate);
         }
         $aErrors = afsUserManagerHelper::prepareErrors($aErrors);
         $response->success(false)->message($aErrors);
     }
     return $this->renderJson($response->asArray());
 }
 /**
  * Create new user 
  *
  * @param sfWebRequest $request 
  * @return array
  * @author Sergey Startsev
  */
 public static function createNewUser(sfWebRequest $request)
 {
     $response = afResponseHelper::create();
     afStudioUser::getInstance()->authorize();
     $sUsername = $request->getParameter('username');
     $aUser = json_decode($request->getParameter('user'), true);
     $user = afStudioUser::retrieve($sUsername);
     $aErrors = array();
     if ($user) {
         $aErrors['username'] = '******';
     }
     if (afStudioUser::retrieveByEmail($aUser['email'])) {
         $aErrors['email'] = "User with this `email` already exists";
     }
     if (!afStudioUser::getInstance()->isAdmin()) {
         if ($aUser['captcha'] != sfContext::getInstance()->getUser()->getFlash(afsCaptcha::SESSION_IDENTIFICATOR)) {
             $aErrors['captcha'] = "Invalid verification code";
         }
     }
     // Prepare data for validating and creating
     $aCreate = array(afStudioUser::USERNAME => $sUsername, afStudioUser::FIRST_NAME => $aUser['first_name'], afStudioUser::LAST_NAME => $aUser['last_name'], afStudioUser::EMAIL => $aUser['email'], afStudioUser::PASSWORD => $aUser['password'], afStudioUser::ROLE => afStudioUser::getInstance()->isAdmin() ? $aUser['role'] : 'user');
     // Validating user data
     $validate = afStudioUser::validate($aCreate);
     if (is_bool($validate) && $validate === true && empty($aErrors)) {
         // unset username - no need to creating meta-field username
         unset($aCreate[afStudioUser::USERNAME]);
         // Create new user
         afStudioUser::create($sUsername, $aCreate);
         afsNotificationPeer::log('User has been successfully created', 'afStudioUser');
         // getting current domain
         $domain = sfConfig::get('app_domain') ? sfConfig::get('app_domain') : sfContext::getInstance()->getRequest()->getHost();
         $aParameters = array('user' => $aUser, 'password' => $aUser['password']);
         sfProjectConfiguration::getActive()->loadHelpers(array("Url", "Tag"));
         $message = Swift_Message::newInstance()->setFrom("no-reply@{$domain}", 'Studio')->setTo($aUser['email'])->setSubject('Studio Account')->setBody(sfContext::getInstance()->getController()->getAction('afsUserManager', 'create')->getPartial('afsUserManager/create', $aParameters))->setContentType('text/html');
         try {
             @sfContext::getInstance()->getController()->getAction('afsUserManager', 'create')->getMailer()->send($message);
         } catch (Swift_TransportException $e) {
             $response->console("Local server can't sent email for now. Please check mail server settings.");
         }
     } else {
         if (is_array($validate)) {
             $aErrors = self::mergeErrors($aErrors, $validate);
         }
     }
     $aErrors = self::prepareErrors($aErrors);
     if (!empty($aErrors)) {
         return $response->success(false)->message($aErrors)->asArray();
     }
     return $response->success(true)->message('User has been successfully created')->asArray();
 }