christiansalazar avatar christiansalazar committed e1d6c54

ampliacion de API: CrugeUserManager::loadUserByCustomField

Comments (0)

Files changed (5)

 Cruge Change Log
 ================
 
+- Enh						Christian Salazar	ampliación del API de CrugeUserManager
 - Enh						Christian Salazar	incorporacion de CrugeConnector para agregar remote login.
 - Enh						Christian Salazar	agregando funciones CrugeUserManager + fix comments
 - Task #07		eacd6345	Ricardo Obregon		Sacar la encriptacion Md5 hacia un metodo externo.

components/CrugeFactory.php

 		}
 		return $fields;
 	}
+
+
+	/**
+	 * getICrugeFieldValueByValue 
+	 *	 busca un objeto de clase FieldValue por su valor y campo.
+	 * 
+	 * @param mixed $field 
+	 * @param mixed $value 
+	 * @access public
+	 * @return instancia de FieldValue
+	 */
+	public function getICrugeFieldValueByValue($field, $value){
+		return CrugeFieldValue::loadByValue($field->primaryKey, $value);
+	}
+
+
 	/*
 		va a retornar un objeto que implementa a ICrugeFieldValue, el cual esta compuesto
 		de dos objetos: el usuario y el campo.

components/CrugeUserManager.php

 		return $user;
 	}
 
+	/**
+	 * loadUserByCustomField 
+	 *	busca a un usuario de forma por un valor de un campo personalizado 
+	 * @param mixed $customFieldName nombre del campo, ej 'cedula'
+	 * @param mixed $customFieldVal  valor del campo, ej '12182989'
+	 * @access public
+	 * @return instancia de CrugeStoredUser o null.
+	 */
+	public function loadUserByCustomField($customFieldName, $customFieldVal){
+		// primero. busca el campo referenciado por ese nombre
+		$field = $this->loadFieldByName($customFieldName);
+		if($field == null)
+			return null; // campo no existe
+
+		$fieldvalueInstance = CrugeFactory::get()->
+			getICrugeFieldValueByValue($field, $customFieldVal);
+
+		if($fieldvalueInstance == null)
+			return null; // no hay coincidencias
+
+		return $this->loadUserById($fieldvalueInstance->iduser, true);
+	}
+
 	/*
 		crea una nueva instancia de ICrugeStoredUser
 	*/

interfaces/ICrugeFieldValue.php

 	*/
 	public static function loadModel($id);
 	public static function loadModelBy($iduser,$idfield);
+	public static function loadByValue($idfield, $value);
 	
 	/**
 		devuelve un array de objetos que implementan a ICrugeFieldValue

models/data/CrugeFieldValue.php

 	public static function loadModelBy($iduser,$idfield){
 		return self::model()->findByAttributes(array('iduser'=>$iduser,'idfield'=>$idfield));
 	}
+
+	/**
+	 * loadByValue 
+	 *	busca un FieldValue por su valor y campo 
+	 * @param mixed $idfield 
+	 * @param mixed $value 
+	 * @static
+	 * @access public
+	 * @return instancia de CrugeFieldValue o null
+	 */
+	public static function loadByValue($idfield, $value){
+		// para ocasiones podria ser util un indice en el modelo 
+		// para esta busqueda.
+		$filtro = array(
+			":idfield" => $idfield,
+			":value" => $value
+		);
+		foreach(self::model()->findAll(array(
+            	"condition" =>
+	               	"idfield = :idfield AND value = :value",
+	               	"params" => $filtro
+        	)) as $obj)
+				return $obj;
+		return null;
+	}
 	
 	/**
 		devuelve un array de objetos que implementan a ICrugeFieldValue
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.