array('*'), 'users'=>array('*'), ), array('allow', // allow admin user to perform 'admin' and 'delete' actions 'actions'=>array('create','update','view','admin','delete'), 'users'=>UserModule::getAdmins(), ), array('deny', // deny all users 'users'=>array('*'), ), ); } /** * Displays a particular model. */ public function actionView() { $this->render('view',array( 'model'=>$this->loadModel(), )); } /** * Register Script */ public function registerScript() { $basePath=Yii::getPathOfAlias('application.modules.user.views.asset'); $baseUrl=Yii::app()->getAssetManager()->publish($basePath); $cs = Yii::app()->getClientScript(); $cs->registerCoreScript('jquery'); $cs->registerCssFile($baseUrl.'/css/redmond/jquery-ui.css'); $cs->registerCssFile($baseUrl.'/css/style.css'); $cs->registerScriptFile($baseUrl.'/js/jquery-ui.min.js'); $cs->registerScriptFile($baseUrl.'/js/form.js'); $cs->registerScriptFile($baseUrl.'/js/jquery.json.js'); $widgets = self::getWidgets(); $wgByTypes = ProfileField::itemAlias('field_type'); foreach ($wgByTypes as $k=>$v) { $wgByTypes[$k] = array(); } foreach ($widgets[1] as $widget) { if (isset($widget['fieldType'])&&count($widget['fieldType'])) { foreach($widget['fieldType'] as $type) { array_push($wgByTypes[$type],$widget['name']); } } } //echo '
'; print_r($widgets[1]); die();
		$js = "

	var name = $('#name'),
	value = $('#value'),
	allFields = $([]).add(name).add(value),
	tips = $('.validateTips');
	
	var listWidgets = jQuery.parseJSON('".str_replace("'","\'",CJavaScript::jsonEncode($widgets[0]))."');
	var widgets = jQuery.parseJSON('".str_replace("'","\'",CJavaScript::jsonEncode($widgets[1]))."');
	var wgByType = jQuery.parseJSON('".str_replace("'","\'",CJavaScript::jsonEncode($wgByTypes))."');
	
	var fieldType = {
			'INTEGER':{
				'hide':['match','other_validator','widgetparams'],
				'val':{
					'field_size':10,
					'default':'0',
					'range':'',
					'widgetparams':''
				}
			},
			'VARCHAR':{
				'hide':['widgetparams'],
				'val':{
					'field_size':255,
					'default':'',
					'range':'',
					'widgetparams':''
				}
			},
			'TEXT':{
				'hide':['field_size','range','widgetparams'],
				'val':{
					'field_size':0,
					'default':'',
					'range':'',
					'widgetparams':''
				}
			},
			'DATE':{
				'hide':['field_size','field_size_min','match','range','widgetparams'],
				'val':{
					'field_size':0,
					'default':'0000-00-00',
					'range':'',
					'widgetparams':''
				}
			},
			'FLOAT':{
				'hide':['match','other_validator','widgetparams'],
				'val':{
					'field_size':'10.2',
					'default':'0.00',
					'range':'',
					'widgetparams':''
				}
			},
			'DECIMAL':{
				'hide':['match','other_validator','widgetparams'],
				'val':{
					'field_size':'10,2',
					'default':'0',
					'range':'',
					'widgetparams':''
				}
			},
			'BOOL':{
				'hide':['field_size','field_size_min','match','widgetparams'],
				'val':{
					'field_size':0,
					'default':0,
					'range':'1==".UserModule::t('Yes').";0==".UserModule::t('No')."',
					'widgetparams':''
				}
			},
			'BLOB':{
				'hide':['field_size','field_size_min','match','widgetparams'],
				'val':{
					'field_size':0,
					'default':'',
					'range':'',
					'widgetparams':''
				}
			},
			'BINARY':{
				'hide':['field_size','field_size_min','match','widgetparams'],
				'val':{
					'field_size':0,
					'default':'',
					'range':'',
					'widgetparams':''
				}
			}
		};
			
	function showWidgetList(type) {
		$('div.widget select').empty();
		$('div.widget select').append('');
		if (wgByType[type]) {
			for (var k in wgByType[type]) {
				$('div.widget select').append('');
			}
		}
	}
		
	function setFields(type) {
		if (fieldType[type]) {
			if (".((isset($_GET['id']))?0:1).") {
				showWidgetList(type);
				$('#widgetlist option:first').attr('selected', 'selected');
			}
			
			$('div.row').addClass('toshow').removeClass('tohide');
			if (fieldType[type].hide.length) $('div.'+fieldType[type].hide.join(', div.')).addClass('tohide').removeClass('toshow');
			if ($('div.widget select').val()) {
				$('div.widgetparams').removeClass('tohide');
			}
			$('div.toshow').show(500);
			$('div.tohide').hide(500);
			".((!isset($_GET['id']))?"
			for (var k in fieldType[type].val) { 
				$('div.'+k+' input').val(fieldType[type].val[k]);
			}":'')."
		}
	}
	
	function isArray(obj) {
		if (obj.constructor.toString().indexOf('Array') == -1)
			return false;
		else
			return true;
	}
		
	$('#dialog-form').dialog({
		autoOpen: false,
		height: 400,
		width: 400,
		modal: true,
		buttons: {
			'".UserModule::t('Save')."': function() {
				var wparam = {};
				var fparam = {};
				$('#dialog-form fieldset .wparam').each(function(){
					if ($(this).val()) wparam[$(this).attr('name')] = $(this).val();
				});
				
				var tab = $('#tabs ul li.ui-tabs-selected').text();
				fparam[tab] = {};
				$('#dialog-form fieldset .tab-'+tab).each(function(){
					if ($(this).val()) fparam[tab][$(this).attr('name')] = $(this).val();
				});
				
				if ($.JSON.encode(wparam)!='{}') $('div.widgetparams input').val($.JSON.encode(wparam));
				if ($.JSON.encode(fparam[tab])!='{}') $('div.other_validator input').val($.JSON.encode(fparam)); 
				
				$(this).dialog('close');
			},
			'".UserModule::t('Cancel')."': function() {
				$(this).dialog('close');
			}
		},
		close: function() {
		}
	});


	$('#widgetparams').focus(function() {
		var widget = widgets[$('#widgetlist').val()];
		var html = '';
		var wparam = ($('div.widgetparams input').val())?$.JSON.decode($('div.widgetparams input').val()):{};
		var fparam = ($('div.other_validator input').val())?$.JSON.decode($('div.other_validator input').val()):{};
		
		// Class params
		for (var k in widget.params) {
			html += '';
			html += '';
		}
		// Validator params		
		if (widget.other_validator) {
			var tabs = '';
			var li = '';
			for (var t in widget.other_validator) {
				tabs += '
'; li += ''+t+''; for (var k in widget.other_validator[t]) { tabs += ''; if (isArray(widget.other_validator[t][k])) { tabs += ''; } else { tabs += ''; } } tabs += '
'; } html += '
'+tabs+'
'; } $('#dialog-form fieldset').html(html); $('#tabs').tabs(); // Show form $('#dialog-form').dialog('open'); }); $('#field_type').change(function() { setFields($(this).val()); }); $('#widgetlist').change(function() { if ($(this).val()) { $('div.widgetparams').show(500); } else { $('div.widgetparams').hide(500); } }); // show all function $('div.form p.note').append('
".UserModule::t('Show all')."'); $('#showAll').click(function(){ $('div.row').show(500); return false; }); // init setFields($('#field_type').val()); "; $cs->registerScript(__CLASS__.'#dialog', $js); } /** * Creates a new model. * If creation is successful, the browser will be redirected to the 'view' page. */ public function actionCreate() { $model=new ProfileField; $scheme = get_class(Yii::app()->db->schema); if(isset($_POST['ProfileField'])) { $model->attributes=$_POST['ProfileField']; if($model->validate()) { $sql = 'ALTER TABLE '.Profile::model()->tableName().' ADD `'.$model->varname.'` '; $sql .= $this->fieldType($model->field_type); if ( $model->field_type!='TEXT' && $model->field_type!='DATE' && $model->field_type!='BOOL' && $model->field_type!='BLOB' && $model->field_type!='BINARY' ) $sql .= '('.$model->field_size.')'; $sql .= ' NOT NULL '; if ($model->field_type!='TEXT'&&$model->field_type!='BLOB'||$scheme!='CMysqlSchema') { if ($model->default) $sql .= " DEFAULT '".$model->default."'"; else $sql .= (( $model->field_type=='TEXT' ||$model->field_type=='VARCHAR' ||$model->field_type=='BLOB' ||$model->field_type=='BINARY' )?" DEFAULT ''":(($model->field_type=='DATE')?" DEFAULT '0000-00-00'":" DEFAULT 0")); } $model->dbConnection->createCommand($sql)->execute(); $model->save(); $this->redirect(array('view','id'=>$model->id)); } } $this->registerScript(); $this->render('create',array( 'model'=>$model, )); } /** * Updates a particular model. * If update is successful, the browser will be redirected to the 'view' page. */ public function actionUpdate() { $model=$this->loadModel(); if(isset($_POST['ProfileField'])) { $model->attributes=$_POST['ProfileField']; if($model->save()) $this->redirect(array('view','id'=>$model->id)); } $this->registerScript(); $this->render('update',array( 'model'=>$model, )); } /** * Deletes a particular model. * If deletion is successful, the browser will be redirected to the 'index' page. */ public function actionDelete() { if(Yii::app()->request->isPostRequest) { // we only allow deletion via POST request $scheme = get_class(Yii::app()->db->schema); $model = $this->loadModel(); if ($scheme=='CSqliteSchema') { $attr = Profile::model()->attributes; unset($attr[$model->varname]); $attr = array_keys($attr); $connection=Yii::app()->db; $transaction=$connection->beginTransaction(); $status=true; try { $sql = ''; $connection->createCommand( "CREATE TEMPORARY TABLE ".Profile::model()->tableName()."_backup (".implode(',',$attr).")" )->execute(); $connection->createCommand( "INSERT INTO ".Profile::model()->tableName()."_backup SELECT ".implode(',',$attr)." FROM ".Profile::model()->tableName() )->execute(); $connection->createCommand( "DROP TABLE ".Profile::model()->tableName() )->execute(); $connection->createCommand( "CREATE TABLE ".Profile::model()->tableName()." (".implode(',',$attr).")" )->execute(); $connection->createCommand( "INSERT INTO ".Profile::model()->tableName()." SELECT ".implode(',',$attr)." FROM ".Profile::model()->tableName()."_backup" )->execute(); $connection->createCommand( "DROP TABLE ".Profile::model()->tableName()."_backup" )->execute(); $transaction->commit(); } catch(Exception $e) { $transaction->rollBack(); $status=false; } if ($status) { $model->delete(); } } else { $sql = 'ALTER TABLE '.Profile::model()->tableName().' DROP `'.$model->varname.'`'; if ($model->dbConnection->createCommand($sql)->execute()) { $model->delete(); } } // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser if(!isset($_POST['ajax'])) $this->redirect(array('admin')); } else throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); } /** * Manages all models. */ public function actionAdmin() { $model=new ProfileField('search'); $model->unsetAttributes(); // clear any default values if(isset($_GET['ProfileField'])) $model->attributes=$_GET['ProfileField']; $this->render('admin',array( 'model'=>$model, )); /* $dataProvider=new CActiveDataProvider('ProfileField', array( 'pagination'=>array( 'pageSize'=>Yii::app()->controller->module->fields_page_size, ), 'sort'=>array( 'defaultOrder'=>'position', ), )); $this->render('admin',array( 'dataProvider'=>$dataProvider, ));//*/ } /** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. */ public function loadModel() { if($this->_model===null) { if(isset($_GET['id'])) $this->_model=ProfileField::model()->findbyPk($_GET['id']); if($this->_model===null) throw new CHttpException(404,'The requested page does not exist.'); } return $this->_model; } /** * MySQL field type * @param $type string * @return string */ public function fieldType($type) { $type = str_replace('UNIX-DATE','INTEGER',$type); return $type; } public static function getWidgets($fieldType='') { $basePath=Yii::getPathOfAlias('application.modules.user.components'); $widgets = array(); $list = array(''=>UserModule::t('No')); if (self::$_widgets) { $widgets = self::$_widgets; } else { $d = dir($basePath); while (false !== ($file = $d->read())) { if (strpos($file,'UW')===0) { list($className) = explode('.',$file); if (class_exists($className)) { $widgetClass = new $className; if ($widgetClass->init()) { $widgets[$className] = $widgetClass->init(); if ($fieldType) { if (in_array($fieldType,$widgets[$className]['fieldType'])) $list[$className] = $widgets[$className]['label']; } else { $list[$className] = $widgets[$className]['label']; } } } } } $d->close(); } return array($list,$widgets); } /** * Get Values for Dependent DropDownList. * @author juan.gaviria@dsotogroup.com */ public function actionGetDroDownDepValues(){ $post = $_POST; $model = new $post['model']; $data = CHtml::listData($model->findAll($post['varname'].'=:'.$post['varname'], array(':'.$post['varname']=>$post[$post['varname']])), 'id', $post['optionDestName']); echo CHtml::tag('option', array('value'=>''), CHtml::encode('Seleccione...'), true); foreach($data AS $value=>$name){ echo CHtml::tag('option', array('value'=>$value), CHtml::encode($name), true); } } /** * Performs the AJAX validation. * @param CModel the model to be validated */ protected function performAjaxValidation($model) { if(isset($_POST['ajax']) && $_POST['ajax']==='profile-field-form') { echo CActiveForm::validate($model); Yii::app()->end(); } } }