christiansalazar avatar christiansalazar committed a224a7f

agregando nuevas funciones a CrugeUserManager. fix licence.

Comments (0)

Files changed (27)

+.swp
+*.swp
+*.tmp
+
 Cruge Change Log
 ================
 
+- 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.
 
 (antes del task 07 no habian contribuciones ni anotaciones de CHANGELOG)
  * CrugeModule 
  * 
  * @uses CWebModule
- * @package 
- * @version $id$
  * @author Christian Salazar H. <christiansalazarh@gmail.com> 
- * @license BSD LICENSE.
+ * @license /protected/modules/cruge/LICENSE
  */
 class CrugeModule extends CWebModule
 {

components/CrugeAccessControlFilter.php

 				
 		la excepcion reportara error 401 indicando 'Access Denied'. Estandar http.
 		
-		@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	*/
-	class CrugeAccessControlFilter extends CFilter {
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
+*/
+class CrugeAccessControlFilter extends CFilter {
 
 		public function init(){
 			parent::init();
 		{
 		}
 	}
-?>
+?>

components/CrugeAuthManager.php

 		$auth->assign('editor','editorC');
 		$auth->assign('admin','adminD');	
 	
+ 	@author: original de Maurizio Domba <mdomba@gmail.com>
 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
-
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeAuthManager extends CAuthManager implements IAuthManager {
 
 		return $ar;
 	}
 	
-}// finclase
+}// finclase

components/CrugeException.php

 
 	centraliza la emision de excepciones, ayudando a traducir los mensajes usando CrugeTranslator
 
-	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeException extends CHttpException {
 	public $classParent;
 		*/
 		return CrugeTranslator::t($this->message)."<br/>".$this->code;
     }
-}
+}

components/CrugeMailer.php

 		para controlar el despacho de los correos: 
 			editar a CrugeMailerBase.php o crear un metodo sendemail con los mismos argumentos para que se ajuste a las necesidades.
 		
-		@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-		http://www.yiiframeworkenespanol.org/licencia
-	*/
-	class CrugeMailer extends CrugeMailerBase implements ICrugeMailer {
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
+*/
+class CrugeMailer extends CrugeMailerBase implements ICrugeMailer {
 	
 		public $debug = false;
 		public $throwsAnExceptionIfMailFails = false;

components/CrugeTranslator.php

 	provee centralizacion para aplicar la traduccion de mensajes de espa�ol a otros idiomas
 
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeTranslator {
 	/**
 		
 		return $keyword;
 	}
-}
+}

components/CrugeUi.php

 		<?php echo Yii::app()->user->ui->userManagementAdminLink; ?>
 
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeUi extends CComponent {
 
 		echo CHtml::submitButton($_texto,$ar);
 	}
 	
-}
+}

components/CrugeUiAccessControlFilter.php

 <?php 
-	/*	CrugeUiAccessControlFilter
+/*	CrugeUiAccessControlFilter
 		
 		es una extension de CrugeAccessControlFilter (ver documentacion en esa clase base).
 		
 							array('registration','login','pwdrec'
 							,'activationurl','ajaxgeneratenewpassword')
 					),
-			
 		
-		@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	*/
-	class CrugeUiAccessControlFilter extends CrugeAccessControlFilter {
+	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE	
+*/
+class CrugeUiAccessControlFilter extends CrugeAccessControlFilter {
 
 		public $publicActions;
 	
 		{
 		}
 	}
-?>
+?>

components/CrugeUser.php

 	@see CrugeAuthDefault
 	@see ICrugeAuth
 	
-	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeUser extends CBaseUserIdentity implements IUserIdentity {
 
 		return CrugeTranslator::t($this->_lastErrorDescr);
 	}
 
-}
+}

components/CrugeUserManager.php

 		CrugeTranslator
 
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 
 define("CRUGEUSERSTATE_NOTACTIVATED",0);
 		return $user;
 	}
 
+	/**
+	 * loadUserByUsername 
+	 *	busca un usuario por su username exclusivamente. 
+	 * @param mixed $username 
+	 * @param mixed $boolAndLoadFields flag, true para precargar campos personalizados.
+	 * @access public
+	 * @return instancia de CrugeStoredUser
+	 */
+	public function loadUserByUsername($username, $boolAndLoadFields=false){
+		$user = CrugeFactory::get()->getICrugeStoredUserByUsername($username);
+		if(($boolAndLoadFields == true) && ($user != null))
+			$this->loadUserFields($user);
+		return $user;
+	}
+
 	/*
 		crea una nueva instancia de ICrugeStoredUser
 	*/
 		return "";
 	}
 
+	/**
+	 * getFieldValueInstance
+	 *	 retorna el objeto
+	 * @param mixed $iduser primarykey o instancia de ICrugeStoredUser
+	 * @param mixed $idfield primarykey del Field o instancia o fieldname
+	 * @access public
+	 * @return instancia de CrugeFieldValue (a diferencia de getFieldValue
+	 quien retorna solo el valor).
+	 */
+	public function getFieldValueInstance($iduser, $idfield){
+		// verifica si iduser es un ID numerico (su primarykey)
+		//	o si es una instancia..
+		if(is_string($iduser)){
+			$u = $this->loadUserById($iduser);
+		}else{
+			$u = $iduser;
+		}
+		// ahora, 
+		if($u != null){
+			if(is_numeric($idfield)){
+				// busca por el primarykey de un campo
+				//
+				$field = $this->loadFieldById($idfield);
+				if($field == null)
+					return null;
+			}
+			else
+			{
+				// busca por nombre
+				//
+				if(is_string($idfield)){
+					$field = $this->loadFieldByName($idfield);
+					if($field == null)
+						return null;
+				}
+				else{
+					// asume que es una instancia que implementa a ICrugeField
+					$field = $idfield;
+				}
+			}
+			// asocia el campo con el valor de este usuario
+			if($field != null){
+				$fv = CrugeFactory::get()->getICrugeFieldValue($u,$field);
+				if($fv != null)
+					return $fv;
+			}
+		}
+		return null;
+	}
+
+
 	/*
 		funciona como lo haria un CActiveForm::labelEx, pero considerando que estos
 		campos aqui indicados no pertenecen al modelo como tal porque son campos definidos
 		return CrugeFactory::get()->getICrugeSession($id);
 	}
 
+	/**
+	 * generateNewUsername 
+	 * 	genera un username no existente agregando un ".NNNN" al final del email recortado hasta su arroba.
+	 * @param mixed $emailBased email del cual basarse.
+	 * @access public
+	 * @return void un username no existente. ejmplo: micorreo.8217i
+	 *
+	 *	importante:	
+	 *		si el correo como tal (cortado hasta su arroba) no existe al
+	 *		buscar un usuario por su username, pues se usará, luego
+	 *		se le ira agregando un numero secuencial hasta dar con un username
+	 *		que no exista.
+	 */
+	public function generateNewUsername($emailBased){
+		$username = strtolower(substr($emailBased,0,strpos($emailBased,'@')));
+		$ok=false;
+		$sec=1;
+		$sep='.';
+		do{
+			$u = $this->loadUserByUsername($username);
+			if($u == null){
+				// no existe, lo usamos.
+				$ok=true;
+			}else{
+				// si existe, anexamos un separador y un numero secuencial
+				$username .= $sep.$sec;
+				$sep='';
+				$sec++;
+			}
+		}while(!$ok);
+		return $username;
+	}
+
+	/**
+	 * createNewUser
+	 *	inserta un nuevo usuario con los valores mapeados indicados.
+	 *
+	 *	mapped_values, es un array -indexado- con los siguientes campos:
+	 *			'username'=>'userxxx', 'email'=>'xyz@gmail.com',
+	 *			y los siguientes serian los nombres de los campos
+	 *			personalizados
+	 *			'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
+	 * @access private
+	 * @return CrugeStoredUser retornado por um->createBlankUser 
+	 */
+	public function createNewUser($mapped_values) 
+	{
+		// para crear el usuario se requiere como minimo el email
+		// si el username no fue provisto se creará uno en base 
+		// al email:
+		//
+		$password = CrugeUtil::passwordGenerator();
+		$user = $this->createBlankUser();
+		$user->email = $mapped_values['email'];
+		if(isset($mapped_values['username']))
+			$user->username = $mapped_values['username'];
+		// genera un username si el provisto es vacio
+		if(empty($user->username))
+			$user->username = 
+				$this->generateNewUsername($user->email);
+	
+		// la establece como "Activada"
+		$this->activateAccount($user);
+		// ahora a ponerle una clave
+		$this->changePassword($user,$password);
+		// guarda usando el API, lo que lo hace pasar por el sistema de filtros.
+		if($this->save($user)){
+			foreach($mapped_values as $fieldname=>$value){
+				if(($fieldname == 'username') || ($fieldname == 'email')){
+					continue;
+				}
+				else{
+					// campo personalizado:
+					$fv = $this->getFieldValueInstance(
+							$user, $fieldname);
+					$fv->value = $value;
+					$fv->update();
+				}
+			}
+			// le asigna un rol por defecto
+			//
+			$role = $this->getDefaultSystem()->get("defaultroleforregistration");
+			Yii::log(__METHOD__."\n role: ".$role,"info");
+			if(Yii::app()->user->rbac->getAuthItem($role) != null){
+				Yii::log(__METHOD__."\n asignando role: ".$role." a userid:"
+					.$user->getPrimaryKey(),"info");
+				Yii::app()->user->rbac->assign($role,$user->getPrimaryKey());
+			}
+			// le envia un email con su clave generada automaticamente
+			Yii::app()->crugemailer->sendPasswordTo($user,$password);
+			return $user;
+		}
+		else
+		{
+			// un error de validacion. emitido por alguna regla de 
+			// cruge.models.data.CrugeStoredUser
+			//
+			$errores = CHtml::errorSummary($user);
+			throw new CrugeException("no se pudo crear el usuario: ".$errores);
+		}
+	}
+	
 }

components/CrugeUtil.php

 	funciones variadas que se usan durante toda la aplicacion.
 	
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeUtil extends CComponent {
 
         return hash($algo, $value);
     }
 	
-}
+}

components/CrugeWebUser.php

 
 
 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@license SEE ALSO yourapp/protected/modules/cruge/LICENSE
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeWebUser extends CWebUser implements IWebUser {
 
 		return null;
 	}
 };
+

controllers/UiController.php

 		igualmente, no hay instancias directas a modelos de datos, esto es para ayudar
 		a la insercion de diferentes ORDBM.
 
-	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
 */
 class UiController extends Controller
 {
 			Yii::app()->end();
 		}
 	}
-}
+}

Binary file removed.

Add a comment to this file

doc/diseno-uml.zargo~

Binary file removed.

models/auth/CrugeAuthDefault.php

 	esta clase es consumida por: CrugeUser::authenticate()
 	quien a su vez es invocada por CrugeLogon
 
- 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeAuthDefault extends CBaseUserIdentity implements ICrugeAuth {
 

models/data/CrugeField.php

 <?php
-
 /**
- * This is the model class for table "cruge_field".
+ * CrugeField 
  *
- * The followings are the available columns in table 'cruge_field':
  * @property integer $idfield
  * @property string $fieldname
  * @property string $longname
  * @property string $useregexp	expresion regular, dejar en blanco si no se usa.
  * @property string $useregexpmsg	mensaje cuando la expresion regular falla
  * @property string $predetvalue	valor predeterminado, usado ademas para llenar listas de opcion
- */
+ * 
+ * @uses CActiveRecord
+ * @author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+ * @license protected/modules/cruge/LICENCE
+*/
 class CrugeField extends CActiveRecord 	
 	implements ICrugeField	
 		//,IModelErrorReport
 			),
 		));
 	}
-}
+}

models/data/CrugeFieldValue.php

 <?php
-/**
+/** CrugeFieldValue
  * This is the model class for table "cruge_fieldvalue".
  *
  * The followings are the available columns in table 'cruge_fieldvalue':
  * @property integer $iduser
  * @property integer $idfield
  * @property string $value
+ * @author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+ * @license protected/modules/cruge/LICENCE
  */
 class CrugeFieldValue extends CActiveRecord
 {
 			'criteria'=>$criteria,
 		));
 	}
-}
+}

models/data/CrugeSession.php

  * @property string $logoutdate
  * @property integer $usagecount
  * @property string $lastusage
- 
- 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+ * @author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+ * @license protected/modules/cruge/LICENCE
  */
 class CrugeSession extends CActiveRecord implements ICrugeSession
 {
 			),
 		));
 	}
-}
+}

models/data/CrugeStoredUser.php

  * @property string $regdate	fecha de registro
  * @property string $actdate	fecha de activacion
  * @property string $logondate	ultimo login exitoso
- 
- 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+ * @author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+ * @license protected/modules/cruge/LICENCE
  */
 class CrugeStoredUser extends CActiveRecord implements ICrugeStoredUser
 {
 			),
 		));
 	}
-}
+}

models/data/CrugeSystem.php

 	$defaultroleforregistration		el rol que se aplicara por defecto a los usuarios registrados
 	$registrationonlogin			1 o 0, para que aparezca el link de "registration" en el form login
 
- 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
-*/
+ * @author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+ * @license protected/modules/cruge/LICENCE
+ */
 class CrugeSystem extends CActiveRecord implements ICrugeSystem
 {
 
 			'criteria'=>$criteria,
 		));
 	}
-}
+}

models/filters/DefaultSessionFilter.php

 /** Filtro por defecto para controlar el otorgamiento de sesiones
 
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 class DefaultSessionFilter implements ICrugeSessionFilter {
 
 	}
 
 
-}
+}

models/filters/DefaultUserFilter.php

 		$model->getFields(); la cual da un array de ICrugeField
 	
 	
-	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+ 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
 */
 	class DefaultUserFilter implements ICrugeUserFilter
 	{
 			return true;
 		}
 	}
-?>
+?>

models/ui/CrugeAuthItemEditor.php

 		
 	Modelo para editar un CAuthItem.
 	
- 	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
-*/
+	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
+	@license protected/modules/cruge/LICENCE
+ */
 class CrugeAuthItemEditor extends CFormModel {
 		
 	public $name;
 			'deleteConfirmation' => ucfirst(CrugeTranslator::t('confirmar eliminacion')),
 		);
 	}
-}
+}

models/ui/CrugeLogon.php

 
 
  	@author: Christian Salazar H. <christiansalazarh@gmail.com> @bluyell
-	@copyright Copyright &copy; 2008-2012 Yii Software LLC
-	@license http://www.yiiframework.com/license/
+	@license protected/modules/cruge/LICENCE
 */
 class CrugeLogon extends CFormModel {
 	public $username;
 		else
 			return false;
 	}
-}
+}
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.