Commits

christiansalazar  committed c72bbf8

mejoras en createNewUser y nuevo metodo createRandomUsers

  • Participants
  • Parent commits eb37d04

Comments (1)

  1. Christian Salazar repo owner

    CREAR USUARIOS FICTICIOS (ALEATORIOS) #

    Cruge te permite crear usuarios ficticios para tus pruebas, usando nombres y apellidos en ingles.

    Por defecto se asume que tienes campos personalizados 'firstname' y 'lastname' aunque puedes especificar tus propios campos personalizados para el nombre y el apellido.

    Considera la precaucion de que si este proceso dura mucho entonces PHP puede bloquearse debido a 'max_execution_time', la cual deberas alargar si pretendes crear muchos usuarios a la vez. Lo mas recomendable es hacerlo en lotes de a 100.

      // en esta modalidad crear 100 usuarios con nombres ficticios
      // se les asignara el ROL definido en las variables de sistema
      // el nombre y apellido ficticio se asignara a campos personalizados
      // llamados por defecto: 'firstname' y 'lastname' respectivamente.
      Yii::app()->user->um->createRandomUsers(100);
    
      // en esta modalidad se crearan usuarios tambien pero
      // usando los campos personalizados 'nombre' y 'apellido'
      // 
      Yii::app()->user->um->createRandomUsers(100,'default','nombre','apellido');
    

Files changed (1)

File components/CrugeUserManager.php

      *            'nombre'=>'pedro', 'apellido'=>'perez'
      *  si username es vacio (en el array de mapped_values) pues se genera uno.
      *
-     * @param mixed $mapped_values array con valores mapeados
+     * @param array $mapped_values array con valores mapeados
+	 * @param string $role_name usar 'default' para usar rol definido en variables de sistema.
+	 * @param boolean $bool_send_email true para que envie correos de notificacion
      * @access private
      * @return CrugeStoredUser retornado por um->createBlankUser
      */
-    public function createNewUser($mapped_values)
+    public function createNewUser($mapped_values,$role_name='default', $bool_send_email=true)
     {
         // para crear el usuario se requiere como minimo el email
         // si el username no fue provisto se creará uno en base
             }
             // le asigna un rol por defecto
             //
-            $role = $this->getDefaultSystem()->get("defaultroleforregistration");
+			if($role_name == 'default'){
+            	$role = $this->getDefaultSystem()->get("defaultroleforregistration");
+			}else{ $role = $role_name; }
             Yii::log(__METHOD__ . "\n role: " . $role, "info");
             if (Yii::app()->user->rbac->getAuthItem($role) != null) {
                 Yii::log(
                 Yii::app()->user->rbac->assign($role, $user->getPrimaryKey());
             }
             // le envia un email con su clave generada automaticamente
-            Yii::app()->crugemailer->sendPasswordTo($user, $password);
+			if($bool_send_email == true)
+            	Yii::app()->crugemailer->sendPasswordTo($user, $password);
             return $user;
         } else {
             // un error de validacion. emitido por alguna regla de
         }
     }
 
+	/**
+		crea usuarios ficticios en la base de datos de usuarios de cruge.
+		
+		1. considerar que: 
+		si dura mucho creando usuarios entonces puede haber
+		problemas con la variable de PHP max_execution_time
+
+		2. considerar que: 
+		firstname_field y lastname_field son los nombres de los campos personalizados
+		que recibiran el nombre y apellido aleatorio, deben existir.
+
+		@param integer $size numero de registros a crear.
+		@param string $role_name el nombre del rol, o usar 'default' para usar el del sistema.
+		@param string $firstname_field nombre del campo personalizado que se usara como "Nombre"
+		@param string $lastname_field nombre del campo personalizado que se usara como "Apellido"
+	*/
+	public function createRandomUsers($size, $role_name='default',
+			$firstname_field='firstname',$lastname_field='lastname') {
+		$firstnames = array('jhonn','peter','christian','frederik','william',
+				'mathew','carl','grian','alex','jhonson','michael','francis',
+				'ann','mary','vanessa','robin','glenda','viki','anahi','rose');
+		$lastnames = array('carpenter','romina','julian','camary','olson',
+				'wells','dunkan','lloyd','marcus','veham','dairus','fenix',
+				'samuelson','gregorian','grimald','carlson');
+		$ar = array();
+    	for($i=0;$i<$size;$i++){
+    		$names = $this->_getRandName($firstnames, $lastnames, $ar);
+    		$firstname = $names[0];
+    		$lastname =  $names[1];
+    		$basemail = $firstname[0].$lastname;
+    		$map = array('email'=>$basemail.'@localhost.com',
+    				$firstname_field=>$firstname, $lastname_field=>$lastname);
+    		$this->createNewUser($map,$role_name,false);
+    	}				
+	}
+
+	/**
+	 	usada por createRandomUsers para generar nombres de usuario aleatorio.
+	 */
+	private function _getRandName($f,$l,&$ar){
+		$n=0;
+		while(true){
+			$firstname = $f[rand(0,count($f)-1)];
+			$lastname = $l[rand(0,count($l)-1)];
+			if(!isset($ar[$firstname.'-'.$lastname])){
+				$ar[$firstname.'-'.$lastname]=array($firstname,$lastname);
+				return array($firstname,$lastname);
+			} 
+			if($n++ > 20)
+				throw new Exception('no more names combinations available. please enlarge the names array.');
+		}
+	}
 
     /**
      * loginUser