Commits

christiansalazar  committed 546c789 Merge

Merge e:/code/yiiframeworkenespanol/cruge/protected/modules/cruge

  • Participants
  • Parent commits 1b574aa, 13264cf

Comments (0)

Files changed (24)

File CrugeModule.php

 											// a Yii::app()->user->checkAccess retornara true
 											// si el superuserName coincide con este valor
 
+											
+	// la clase a usar para los CGridView, debido a que BootStrap ofrece clases con distinto estilo
+	// modificando este valor se causa que los CGridView se renderizen usando la clase indicada
+	//
+	// por defecto poner: zii.widgets.grid.CGridView
+	public $useCGridViewClass = 'zii.widgets.grid.CGridView';
+
+	// el estilo del boton que la UI usara:
+	//	normal, jui, bootstrap
+	//  por defecto: normal
+	public $buttonStyle = 'bootstrap';
+	public $buttonConf = 'small';// large, small o mini
+				
 	// ponerla a true para que se creen de forma automatica las operaciones en el sistema de Rbac
 	// cuando se haga una llamada a Yii::app()->user->checkAccess() y esta retorne false. 
 	//
 	// cuando rbacSetupEnabled es true esta operacion sera insertada para que podamos usarla
 	// para ser asignada a los diferentes roles o tareas.
 	//
-	public $rbacSetupEnabled=true;
+	public $rbacSetupEnabled=false;
 
 	
 	// los nombres de los modulos de autenticacion habilitados para reconocer usuarios:
 	// entonces configurar asi:
 	//		"//layouts/otrolayout"
 	public $generalUserManagementLayout = 'ui'; 
+	public $editProfileLayout = 'ui';
 	public $activateAccountLayout = '//layouts/column1'; 
 	public $registrationLayout = '//layouts/column1';
 	public $loginLayout = '//layouts/column1';
+
+en los campos personalizados, tener la capacidad de organizar los campos en grupos, 
+ademas en System, tener la capacidad para seleccionar la forma en como los grupos de campos
+se muestran.

File components/CrugeAccessControlFilter.php

 				// no esta autorizado
 				//
 				if(CrugeUtil::config()->rbacSetupEnabled == false)
-					throw new CrugeException("acceso denegado ");
+					throw new CrugeException("acceso denegado",$itemName);
 			}
 			
 			$filterChain->run();

File components/CrugeException.php

 */
 class CrugeException extends CHttpException {
 	public $classParent;
-	public function __construct($message,$code=500,$currentClass=__CLASS__,$extra=""){
+	public $extra;
+	public function __construct($message,$code=500,$extra=""){
 		parent::__construct($message, $code);
-		$this->classParent = $currentClass;
+		$this->extra = $extra;
 	}
 	public function __toString() {
+		/*
         return $this->classParent . ": [{$this->code}]: ".CrugeTranslator::t($this->message)."\n".$extra;
+		*/
+		return CrugeTranslator::t($this->message).$extra;
     }
 }

File components/CrugeUi.php

 	
 
 	/*
-		entrega los items para un CPortlet.
+		entrega los items para un CPortlet o cualquier CMenu compatible, incluso Bootstrap.
 		
 		actualmente este metodo se invoca desde /cruge/layouts/ui.php
 	*/
-	public function getPortletAdminItems1(){
+	public function getAdminItems(){
 		return array(
-			array('label'=>CrugeTranslator::t("Editar tu Perfil")
-				,'url'=>$this->getEditProfileUrl()),
-			array('label'=>CrugeTranslator::t("Crear Usuario")
-				,'url'=>$this->getUserManagementCreateUrl()),
-			array('label'=>CrugeTranslator::t("Administrar Usuarios")
-				,'url'=>$this->getUserManagementAdminUrl()),
-		);		
-	}
-	public function getPortletAdminItems2(){
-		return array(
-			array('label'=>CrugeTranslator::t("Listar Campos de Perfil")
-				,'url'=>$this->getFieldsAdminListUrl()),
-			array('label'=>CrugeTranslator::t("Crear Campo de Perfil")
-				,'url'=>$this->getFieldsAdminCreateUrl()),
-		);		
-	}
-	public function getPortletAdminItems3(){
-		return array(
-			array('label'=>CrugeTranslator::t("Roles")
-				,'url'=>$this->getRbacListRolesUrl()),
-			array('label'=>CrugeTranslator::t("Tareas")
-				,'url'=>$this->getRbacListTasksUrl()),
-			array('label'=>CrugeTranslator::t("Operaciones")
-				,'url'=>$this->getRbacListOpsUrl()),
-			array('label'=>CrugeTranslator::t("Asignar Roles a Usuarios")
-				,'url'=>$this->getRbacUsersAssignmentsUrl()),
-		);		
-	}
-	public function getPortletAdminItems4(){
-		return array(
-			array('label'=>CrugeTranslator::t("Sesiones")
-				,'url'=>$this->getSessionAdminUrl()),
-			array('label'=>CrugeTranslator::t("Variables del Sistema")
-				,'url'=>$this->getSystemUpdateUrl()),
-		);		
-	}
-	
+		array('label'=>CrugeTranslator::t("Administrador de Usuarios")),
 	
+		array('label'=>CrugeTranslator::t("Editar tu Perfil")
+			,'url'=>$this->getEditProfileUrl()),
+		array('label'=>CrugeTranslator::t("Crear Usuario")
+			,'url'=>$this->getUserManagementCreateUrl()),
+		array('label'=>CrugeTranslator::t("Administrar Usuarios")
+			,'url'=>$this->getUserManagementAdminUrl()),
+			
+		array('label'=>CrugeTranslator::t("Campos Personalizados")),
+			
+		array('label'=>CrugeTranslator::t("Listar Campos de Perfil")
+			,'url'=>$this->getFieldsAdminListUrl()),
+		array('label'=>CrugeTranslator::t("Crear Campo de Perfil")
+			,'url'=>$this->getFieldsAdminCreateUrl()),
+			
+		array('label'=>CrugeTranslator::t("Roles y Asignaciones")),
+			
+		array('label'=>CrugeTranslator::t("Roles")
+			,'url'=>$this->getRbacListRolesUrl()),
+		array('label'=>CrugeTranslator::t("Tareas")
+			,'url'=>$this->getRbacListTasksUrl()),
+		array('label'=>CrugeTranslator::t("Operaciones")
+			,'url'=>$this->getRbacListOpsUrl()),
+		array('label'=>CrugeTranslator::t("Asignar Roles a Usuarios")
+			,'url'=>$this->getRbacUsersAssignmentsUrl()),
+			
+		array('label'=>CrugeTranslator::t("Sistema")),
+			
+		array('label'=>CrugeTranslator::t("Sesiones")
+			,'url'=>$this->getSessionAdminUrl()),
+		array('label'=>CrugeTranslator::t("Variables del Sistema")
+			,'url'=>$this->getSystemUpdateUrl()),
+		);
+	}
 	
-	public function rbacSetupWindow($itemName,$tipoItemName){
-		
+	public function rbacSetupWindow($itemName,$tipoItemName,$descripcion=""){
+
+		$descr="";
+		if($descripcion != '')
+			$descr="<span style='font-weight: normal; color: white; font-style: italic;'>".$descripcion."</span>";
+
 		$estilo = "background-color: rgb(255,140,140);margin: 3px;padding: 3px;border-radius: 5px;color: white;box-shadow: 3px 3px 3px #333;overflow: auto;";
 		$titulo = ucwords(CrugeTranslator::t($tipoItemName." Requerido(a): "));
-		$mensaje = "<b>".$titulo."</b> <b style='color: yellow;'>{$itemName}</b>";
+		$mensaje = "<b>".$titulo."</b> <b style='color: yellow;'>{$itemName}</b> {$descr}";
 	
 		$explica = "Esta ventana aparece porque esta configurada la opcion [CrugeModule::rbacSetupEnabled = true]. Cuando termine de programar los permisos debera deshabilitar esta opcion";
 	
 		return "<div style='$estilo'>$nota<br/><span style='color: white; font-size: small;'>este mensaje aparece porque tiene configurado el modo debug=true</span></div>";
 	}
 	
+	public function requiredCssFiles(){
+		return "<link rel='stylesheet' type='text/css' 
+		href='".Yii::app()->user->ui->getResourcePath("estilos.css")."' media='screen, projection' />";
+	}
+
+
+	public function getCGridViewClass(){
+		return CrugeUtil::config()->useCGridViewClass;
+	}
+	
+	public function bbutton($texto, $name='volver'){
+		$this->_button($texto, $name);
+	}
+
+	public function tbutton($texto){
+		$this->_button($texto);
+	}
+
+	private function _button($texto, $name=null){
+		$ar = array();
+		$_type = 'submit'; // siempre son submit
+		$_icon = 'remove white';
+		if($name != null){
+			$ar = array('name'=>$name);
+		}else{
+			$_icon = 'ok white';
+			$ar = array('name'=>'submit');
+		}
+		
+		$_texto = ucwords(CrugeTranslator::t($texto));
+		
+		$estiloBoton = CrugeUtil::config()->buttonStyle;
+		
+		if($estiloBoton == 'jui'){
+			Yii::app()->getController()->widget('zii.widgets.jui.CJuiButton', array(
+					'name'=>$name,
+					'caption'=>$_texto,
+			));
+			return;
+		}
+		
+		if($estiloBoton == 'bootstrap'){
+			Yii::app()->getController()->widget('bootstrap.widgets.BootButton'
+				, array(
+					'buttonType'=>$_type, 
+					'type'=>'primary', 
+					'htmlOptions'=>$ar,
+					'icon'=>$_icon, 
+					'label'=>$_texto,
+					'size'=>CrugeUtil::config()->buttonConf, // '', 'large', 'small' or 'mini'
+				)
+			);
+			return;
+		}
+		
+		CHtml::submitButton($_texto,$ar);
+	}
+	
 }

File components/CrugeWebUser.php

 					$ai = $this->getrbac()->getAuthItem($itemName);
 					if($ai !== null){
 						echo $this->getui()->rbacSetupWindow($itemName
-							,$this->getrbac()->getAuthItemTypeName($ai->type));
+							,$this->getrbac()->getAuthItemTypeName($ai->type)
+							,$descripcion
+							);
 					}
 				}
 			}
 		else
 		return CrugeTranslator::t("invitado");
 	}
+	public function getEmail(){
+		$u = $this->getUser();
+		if($u != null)
+			return $u->email;
+		return "";
+	}
 	
 	
 	/**

File controllers/UiController.php

 	}
 	
 	private function _publicActionsList(){
-		return array('captcha','registration','login','pwdrec'
+		return array('captcha','registration','login','logout','pwdrec'
 			,'activationurl','ajaxgeneratenewpassword','welcome');
 	}
 	
 		$this->render("usermanagementadmin",array('model'=>$model,'dataProvider'=>$dataProvider));
 	}
 	public function actionEditProfile(){
+	
+		$this->layout = CrugeUtil::config()->editProfileLayout;
+	
 		if(!Yii::app()->user->isGuest){
 			$this->_editUserProfile(Yii::app()->user->user,false);
 		}else{
 	
 	
 	public function actionWelcome(){
+		$this->layout = CrugeUtil::config()->registrationLayout;
 		$this->render("welcome");
 	}
 	

File models/data/CrugeStoredUser.php

 				),
 				
 				
-			array('verifyCode', 'required','on'=>'insert',
+			array('verifyCode', 
+						(Yii::app()->user->um->getDefaultSystem()->getn('registerusingcaptcha') 
+							== 1) ? 'required' : 'safe'
+					,'on'=>'insert',
 					'message'=>CrugeTranslator::t('El codigo de seguridad es requerido'),
 				),
 			array('verifyCode', 'captcha',

File views/layouts/ui.php

 <?php 
 	$this->beginContent('//layouts/'.Yii::app()->layout); 
 ?>
-<link rel="stylesheet" type="text/css" 
-	href=<?php echo Yii::app()->user->ui->getResourcePath("estilos.css"); ?>
-	media="screen, projection" />
+
+<?php echo Yii::app()->user->ui->requiredCssFiles(); ?>
 
 <?php	
 	if(Yii::app()->user->isSuperAdmin)
 				'title'=>ucfirst(CrugeTranslator::t("administracion de usuarios")),
 			));
 			$this->widget('zii.widgets.CMenu', array(
-				'items'=>Yii::app()->user->ui->getPortletAdminItems1(),
-				'htmlOptions'=>array('class'=>'operations'),
-			));
-			$this->endWidget();
-		?>
-		<?php
-			$this->beginWidget('zii.widgets.CPortlet', array(
-				'title'=>ucfirst(CrugeTranslator::t("campos personalizados")),
-			));
-			$this->widget('zii.widgets.CMenu', array(
-				'items'=>Yii::app()->user->ui->getPortletAdminItems2(),
-				'htmlOptions'=>array('class'=>'operations'),
-			));
-			$this->endWidget();
-		?>
-		<?php
-			$this->beginWidget('zii.widgets.CPortlet', array(
-				'title'=>ucfirst(CrugeTranslator::t("roles y asignaciones")),
-			));
-			$this->widget('zii.widgets.CMenu', array(
-				'items'=>Yii::app()->user->ui->getPortletAdminItems3(),
-				'htmlOptions'=>array('class'=>'operations'),
-			));
-			$this->endWidget();
-		?>
-		<?php
-			$this->beginWidget('zii.widgets.CPortlet', array(
-				'title'=>ucfirst(CrugeTranslator::t("Sistema")),
-			));
-			$this->widget('zii.widgets.CMenu', array(
-				'items'=>Yii::app()->user->ui->getPortletAdminItems4(),
+				'items'=>Yii::app()->user->ui->adminItems,
 				'htmlOptions'=>array('class'=>'operations'),
 			));
 			$this->endWidget();

File views/ui/_authitemform.php

 </div>
 
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t(
-			($model->isNewRecord ? 'Crear Nuevo' : 'Actualizar')
-		))); ?>
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Volver'))
-		,array('name'=>'volver')); ?>
+	
+	<?php Yii::app()->user->ui->tbutton(($model->isNewRecord ? 'Crear Nuevo' : 'Actualizar')); ?>
+	<?php Yii::app()->user->ui->bbutton("Volver",'volver'); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/fieldsadminlist.php

 <div class="form">
 <h1><?php echo ucwords(CrugeTranslator::t("campos personalizados"));?></h1>
+
+<?php echo Yii::app()->user->ui->getFieldAdminCreateLink(CrugeTranslator::t("Crear un nuevo Campo Personalizado")); ?>
+
 <?php 
 $cols = array();
 // presenta los campos de ICrugeField
 			),
 		),	
 );
-$this->widget('zii.widgets.grid.CGridView', array(
+$this->widget(Yii::app()->user->ui->CGridViewClass, array(
     'dataProvider'=>$dataProvider,
     'columns'=>$cols,
 	'filter'=>$model,

File views/ui/fieldsadminupdate.php

 		?>
 		<?php
 		echo "<br/><u>".CrugeTranslator::t("telefono:")."</u><br/>^([0-9-.+ \(\)]{3,20})$";
-		echo "<br/><u>".CrugeTranslator::t("digitos y letras:")."</u><br/>^([a-zA-Z0-9])$";
+		echo "<br/><u>".CrugeTranslator::t("digitos y letras:")."</u><br/>^([a-zA-Z0-9]+)$";
 		?>
 	</div>
 	<div class='col'>
 
 
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Actualizar Campo'))); ?>
+	<?php Yii::app()->user->ui->tbutton("Actualizar Campo"); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/login.php

 	</div>	
 	
 	<div class="row buttons">
-		<?php echo CHtml::submitButton(CrugeTranslator::t('Iniciar Sesion')); ?>
+		<?php Yii::app()->user->ui->tbutton("Iniciar Sesion"); ?>
 		<?php echo Yii::app()->user->ui->passwordRecoveryLink; ?>
 		<?php echo Yii::app()->user->ui->registrationLink; ?>
 	</div>

File views/ui/pwdrec.php

 	<?php endif; ?>
 	
 	<div class="row buttons">
-		<?php echo CHtml::submitButton(CrugeTranslator::t('recuperar la clave')); ?>
+		<?php Yii::app()->user->ui->tbutton("Recuperar la Clave"); ?>
 	</div>
 	
 <?php $this->endWidget(); ?>

File views/ui/rbacauthitemdelete.php

 	<?php echo $form->error($model,'deleteConfirmation'); ?>
 </P>
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Eliminar'))); ?>
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Volver')),array('name'=>'volver')); ?>
+	<?php Yii::app()->user->ui->tbutton("Eliminar"); ?>
+	<?php Yii::app()->user->ui->bbutton("Volver",'volver'); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/rbacusersassignments.php

 		<?php echo CrugeTranslator::t("revocar seleccion") ?>
 	</div>
 	<?php 
-		$this->widget('zii.widgets.grid.CGridView', array(
+		$this->widget(Yii::app()->user->ui->CGridViewClass, array(
 			'id'=>'_lista1',
 			'selectableRows'=>2,
 			'dataProvider'=>$roleUsersDataProvider,
 	<div id='asignarSeleccion' class='boton'>
 		<?php echo CrugeTranslator::t("asignar seleccion");?></div>
 	<?php 
-		$this->widget('zii.widgets.grid.CGridView', array(
+		$this->widget(Yii::app()->user->ui->CGridViewClass, array(
 			'id'=>'_lista2',
 			'selectableRows'=>2,
 			'dataProvider'=>$allUsersDataProvider,

File views/ui/registration.php

 
 
 <!-- inicio de campos extra definidos por el administrador del sistema -->
-<div class='form-group-vert'>
-	<h6><?php echo ucfirst(CrugeTranslator::t("tu perfil"));?></h6>
 <?php 
-	foreach($model->getFields() as $f){
-		// aqui $f es una instancia que implementa a: ICrugeField
-		echo "<div class='col'>";
-		echo Yii::app()->user->um->getLabelField($f);
-		echo Yii::app()->user->um->getInputField($model,$f);
-		echo $form->error($model,$f->fieldname);
+	if(count($model->getFields()) > 0){
+		echo "<div class='row form-group-vert'>";
+		echo "<h6>".ucfirst(CrugeTranslator::t("perfil"))."</h6>";
+		foreach($model->getFields() as $f){
+			// aqui $f es una instancia que implementa a: ICrugeField
+			echo "<div class='col'>";
+			echo Yii::app()->user->um->getLabelField($f);
+			echo Yii::app()->user->um->getInputField($model,$f);
+			echo $form->error($model,$f->fieldname);
+			echo "</div>";
+		}
 		echo "</div>";
 	}
 ?>
-</div>
 <!-- fin de campos extra definidos por el administrador del sistema -->
 
 
 
 
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('registrarse'))); ?>
+	<?php Yii::app()->user->ui->tbutton("Registrarse"); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/sessionadmin.php

 <div class="form">
 <h1><?php echo ucwords(CrugeTranslator::t("sesiones de usuario"));?></h1>
 <?php 
-$this->widget('zii.widgets.grid.CGridView', array(
+$this->widget(Yii::app()->user->ui->CGridViewClass, array(
     'dataProvider'=>$dataProvider,
     'columns'=>array(
 		'idsession',

File views/ui/systemupdate.php

 
 
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t("Actualizar"))); ?>
+	<?php Yii::app()->user->ui->tbutton("Actualizar"); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/usermanagementadmin.php

 	
 $cols[] = array(
 	'class'=>'CButtonColumn',
+	
 	'template' => '{update} {eliminar}',
 	'deleteConfirmation'=>CrugeTranslator::t("Esta seguro de eliminar este usuario ?"),
 	'buttons' => array(
 			),
 		),	
 );
-$this->widget('zii.widgets.grid.CGridView', array(
+$this->widget(
+	Yii::app()->user->ui->CGridViewClass, 
+	array(
+	'type'=>'striped bordered condensed',
     'dataProvider'=>$dataProvider,
     'columns'=>$cols,
 	'filter'=>$model,

File views/ui/usermanagementcreate.php

 	</div>
 </div>
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Crear Usuario'))); ?>
+	<?php Yii::app()->user->ui->tbutton("Crear Usuario"); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/usermanagementdelete.php

 	<?php echo $form->error($model,'deleteConfirmation'); ?>
 </P>
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Eliminar Usuario'))); ?>
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Cancelar')),array('name'=>'cancelar')); ?>
+	<?php Yii::app()->user->ui->tbutton("Eliminar Usuario"); ?>
+	<?php Yii::app()->user->ui->bbutton("Volver",'cancelar'); ?>
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/usermanagementupdate.php

 </div>
 
 <!-- inicio de campos extra definidos por el administrador del sistema -->
-<div class='row form-group'>
-	<h6><?php echo ucfirst(CrugeTranslator::t("perfil"));?></h6>
 <?php 
-	foreach($model->getFields() as $f){
-		// aqui $f es una instancia que implementa a: ICrugeField
-		echo "<div class='col'>";
-		echo Yii::app()->user->um->getLabelField($f);
-		echo Yii::app()->user->um->getInputField($model,$f);
-		echo $form->error($model,$f->fieldname);
+	if(count($model->getFields()) > 0){
+		echo "<div class='row form-group'>";
+		echo "<h6>".ucfirst(CrugeTranslator::t("perfil"))."</h6>";
+		foreach($model->getFields() as $f){
+			// aqui $f es una instancia que implementa a: ICrugeField
+			echo "<div class='col'>";
+			echo Yii::app()->user->um->getLabelField($f);
+			echo Yii::app()->user->um->getInputField($model,$f);
+			echo $form->error($model,$f->fieldname);
+			echo "</div>";
+		}
 		echo "</div>";
 	}
 ?>
-</div>
 <!-- fin de campos extra definidos por el administrador del sistema -->
 
 
 <!-- inicio de opciones avanazadas, solo accesible bajo el rol 'admin' -->
 
 <?php 
-	if(Yii::app()->user->checkAccess('edit-advanced-profile-features'))
+	if(Yii::app()->user->checkAccess('edit-advanced-profile-features'
+		,__FILE__." linea ".__LINE__))
 		$this->renderPartial('_edit-advanced-profile-features'
 			,array('model'=>$model,'form'=>$form),false); 
 ?>
 
 
 <div class="row buttons">
-	<?php echo CHtml::submitButton(ucwords(CrugeTranslator::t('Actualizar Usuario'))); ?>
+	<?php Yii::app()->user->ui->tbutton("Guardar Cambios"); ?>
+	
 </div>
 <?php echo $form->errorSummary($model); ?>
 <?php $this->endWidget(); ?>

File views/ui/welcome.php

 	// llamada cuando el actionRegistration ha insertado a un usuario
 ?>
 <div class='form'>
-	<h1><?php echo CrugeTranslator::t("Usted ha sido registrado.");?></h1>
+	<h1><?php echo CrugeTranslator::t("Bienvenido");?></h1>
+	
+	<p><b><?php echo CrugeTranslator::t("La cuenta ha sido creada !"); ?></b></p>
+	<p><?php echo CrugeTranslator::t("haga click aqui para iniciar sesion con sus nuevas credenciales:"); ?>
+			<?php echo Yii::app()->user->ui->loginLink; ?>
+		</p>
 </div>