/**
  * Retrieve the instance of this class.
  * 
  * @return afStudioUser
  * @author Sergey Startsev
  */
 public static function getInstance()
 {
     if (!isset(self::$instance)) {
         self::$instance = new self();
     }
     return self::$instance;
 }
 /**
  * Filter executer
  */
 public function execute($filterChain)
 {
     if ($this->isFirstCall()) {
         $context = $this->getContext();
         // Checking user authorization
         if (!afStudioUser::getInstance()->authorize()) {
             $context->getController()->forward('afsAuthorize', 'index');
             throw new sfStopException();
         }
     }
     $filterChain->execute();
 }
 /**
  * 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();
 }
 /**
  * Log the notification messages in db
  *
  * @param string $message
  * @param string $messageType
  * @param $user: 0=Guest || 1-n=afGuardUser with id 1-n || instanceof afGuardUser class, 0 is default
  * @author radu
  */
 public static function log($message, $messageType = 'notification', $user = 0)
 {
     if (afStudioUser::getInstance()->isAuthenticated()) {
         $user = afStudioUser::getInstance()->getUsername();
     } else {
         // Seems like method called not from studio, or user not authenticated
         $user = '******';
     }
     $afsNotification = new afsNotification();
     $afsNotification->setMessage($message);
     $afsNotification->setMessageType($messageType);
     $afsNotification->setUser($user);
     $afsNotification->setIp(afsToolkit::getIP());
     $afsNotification->save();
 }
예제 #5
0
 /**
  * Check is user exists
  *
  * todo remove if not used
  * 
  * @param sfWebRequest $request 
  * @return array
  * @author Milos Silni
  */
 public function executeCheckUserExist(sfWebRequest $request)
 {
     afStudioUser::getInstance()->authorize();
     $sUsername = $request->getParameter('username');
     $aUser = json_decode($request->getParameter('user'), true);
     $user = afStudioUser::getInstance()->retrieve($sUsername);
     $aErrors = array();
     if ($user) {
         return array('success' => false, 'message' => 'User with this `username` already exists', 'field' => 'username');
     }
     if (afStudioUser::getInstance()->retrieveByEmail($aUser['email'])) {
         return array('success' => false, 'message' => 'User with this `email` already exists', 'field' => 'email');
     }
     return array('success' => true, 'message' => 'User ok');
 }
예제 #6
0
 /**
  * Password request controller
  */
 public function executePasswordRequest(sfWebRequest $request)
 {
     if ($request->getMethod() != sfRequest::POST) {
         // display the form
         return sfView::SUCCESS;
     }
     $email = $request->getParameter('email');
     // Retrieve user via email
     $user = afStudioUser::getInstance()->retrieveByEmail($email);
     if ($user) {
         // set new random password
         $password = substr(md5(rand(100000, 999999)), 0, 6);
         // updating password
         afStudioUser::update($user['username'], array(afStudioUser::PASSWORD => afStudioUser::passwordRule($password)));
         // getting current domain
         $domain = '';
         if (sfConfig::get('app_domain')) {
             $domain = sfConfig::get('app_domain');
         } else {
             $domain = sfContext::getInstance()->getRequest()->getHost();
         }
         // parameters for partial -> recovering mail
         $aParameters = array('user' => $user, 'password' => $password);
         sfProjectConfiguration::getActive()->loadHelpers(array("Url", "Tag"));
         $message = Swift_Message::newInstance()->setFrom("no-reply@{$domain}", 'Studio')->setTo($user['email'])->setSubject('Studio password recovery')->setBody($this->getPartial('recovery', $aParameters))->setContentType('text/html');
         // Sending mail
         if ($this->getMailer()->send($message) > 0) {
             $result = array('success' => true, 'message' => 'Your login information was sent to ' . $email . '. <br>You should receive it shortly, so you can proceed to the ' . link_to('login page', 'afsAuthorize/index') . '.');
         } else {
             $result = array('success' => false, 'message' => 'There is no user with this email address. Please try again!');
         }
     } else {
         $result = array('success' => false, 'message' => 'There is no user with this email address. Please try again!');
     }
     return $this->renderJson($result);
 }
예제 #7
0
 /**
  * Pre-execute mehtod
  *
  * @return void
  * @author Sergey Startsev
  */
 public function preExecute()
 {
     $this->realRoot = sfConfig::get('sf_root_dir');
     $this->afExtjs = afExtjs::getInstance();
     $this->afStudioUser = json_encode(afStudioUser::getInstance()->getInfo());
 }