array('index','view','createMetadatos','guardarArchivo','activo'), 'users'=>array('@'), ), array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('create','update','recorrerEncuestas','editColumns', 'editarEncabezados'), 'users'=>array('@'), ), array('allow', // allow admin user to perform 'admin' and 'delete' actions 'actions'=>array('admin','delete'), 'users'=>array('admin'), ), array('deny', // deny all users 'users'=>array('*'), ), ); } /** * Displays a particular model. * @param integer $id the ID of the model to be displayed */ public function actionView($id) { $this->render('view',array( 'model'=>$this->loadModel($id), )); } /** * Guarda los metadatos de la encuesta y crea la tabla * en la base de datos. */ public function actionCreate() { $model=new BasesEncuestas; $modelCategorias = Categorias::model()->findAll(array('condition' => 'activo = 1')); $tipos = array(); $i = 0; // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['BasesEncuestas'])) { if($_POST['BasesEncuestas']['fecha']=="") $_POST['BasesEncuestas']['fecha'] = date('Y-m-d H:i:s'); $model->attributes=$_POST['BasesEncuestas']; $model->tabla = 'tbl_'.date('ymdHis'); if($model->save()){ if(isset($_POST['id_categoria'])){ $modelBC = BasesCategorias::model()->deleteAll("id_base_encuesta = ".$model->id_encuesta_base); foreach($_POST['id_categoria'] as $registro){ $modelBC = new BasesCategorias; $modelBC->id_categoria = $registro; $modelBC->id_base_encuesta = $model->id_encuesta_base; $modelBC->save(); } //end for } if(isset($_FILES['archivos'])){ foreach ($_FILES['archivos']['error'] as $id => $error) { if ($error == UPLOAD_ERR_OK) { $filename = $_FILES['archivos']['name'][$id]; $nombre = $model->id_encuesta_base.'_'.str_replace(' ', '-', $filename); $modelBasesArchivos = BasesArchivos::model()->deleteAll("id_base_encuesta = ".$model->id_encuesta_base." AND id_tipo_archivo = ".$_POST['tipo_archivo'][$id]); $modelBasesArchivos = new BasesArchivos; $modelBasesArchivos->id_base_encuesta = $model->id_encuesta_base; $modelBasesArchivos->id_tipo_archivo = $_POST['tipo_archivo'][$id]; $modelBasesArchivos->archivo = $nombre; if($modelBasesArchivos->save()){ $nombre_tmp = $_FILES['archivos']['tmp_name'][$id]; move_uploaded_file($nombre_tmp, $_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/archivos/'.$nombre); $ubicacion = $_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/archivos/'.$nombre; //SI ES BD SE CREA LA BD if($modelBasesArchivos->id_tipo_archivo == 1){ //ELIMINAMOS LA TABLA DE HABER SIDO CREADA Yii::app()->funciones->deleteBD($model->tabla); $columnas = array(); $array_clm = array(); $array_data = array(); $columna = ''; $sql = ''; $fila = 1; $cantidad_clm = 0; $handle = fopen($ubicacion, "r"); while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { if($fila == 1){ $columnas = $data; $cantidad_clm = count($columnas); if($cantidad_clm > 0){ if($cantidad_clm > 1000){ $array_clm = array_slice($columnas, 0, 900); $varchar = 7; }else{ $array_clm = $columnas; $varchar = 400; } foreach ($array_clm as $key => $value) { $colum = strtolower($value); if(strlen($colum)>64){ $colum = substr($colum,0,63); $value = substr($colum,0,63); }; if($colum == "latitude" || $colum == "lat" || $colum == "latitud"){ $value = "Latitude"; } if($colum == "longitude" || $colum == "longitud" || $colum == "lng"){ $value = "Longitude"; } $array_clm[$key] = Yii::app()->funciones->cleanColumns(utf8_encode($value)); } //$columna = implode(' VARCHAR('.$varchar.') NOT NULL, ', $array_clm); $columna = implode(' TEXT NOT NULL, ', $array_clm); } Yii::app()->funciones->createDB($model->tabla, $columna, $varchar); }else{ if(count($data)>1000){ $array_data = array_slice($data, 0, 900); }else{ $array_data = $data; } foreach ($data as $key => $value) { if($value == ''){ $data[$key] = '-'; } } $columna = implode(', ', $array_clm); $value = implode('", "', $array_data); Yii::app()->funciones->insertDB($model->tabla, $columna, utf8_encode($value)); } $fila++; } fclose($handle); $nva_tbl = 'enc_'.$model->tabla; $connect = Yii::app()->db; $connect->createCommand("CREATE TABLE IF NOT EXISTS ".$nva_tbl."(id INT(11) NOT NULL AUTO_INCREMENT, encabezado VARCHAR(100) NOT NULL, nombre_corto VARCHAR(100) NOT NULL, descripcion VARCHAR(300) NOT NULL, mostrar TINYINT(2) DEFAULT '1', id_diccionario INT(11), ignorar VARCHAR(255), PRIMARY KEY(id))")->execute(); //Obtener valores a insertar en la tabla $dataReader = $connect->createCommand('SHOW COLUMNS FROM '.$model->tabla)->query(); while(($row = $dataReader->read())!==false){ //Insertar valores dentro de la tabla $connect->createCommand('INSERT INTO '.$nva_tbl.'(encabezado, nombre_corto, descripcion, mostrar, id_diccionario, ignorar) VALUES("'.$row['Field'].'", "'.$row['Field'].'", "'.$row['Field'].'", 1, NULL, "")')->execute(); }//end while }// END CREAR LA BD } }//END IF }//END FORECACH } //end isset($_FILES['archivos']) $this->redirect(array('index')); } } $this->render('createMetadatos',array( 'model'=>$model, 'modelCategorias' => $modelCategorias, )); } /** * Updates a particular model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id the ID of the model to be updated */ public function actionUpdate($id) { $modelBC = array(); $modelBA = array(); $model=$this->loadModel($id); $modelCategorias = Categorias::model()->findAll(array('condition' => 'activo = 1')); $modelBasesCategorias = BasesCategorias::model()->findAll(array('condition' => 'id_base_encuesta = '.$id )); if(!empty($modelBasesCategorias)){ foreach ($modelBasesCategorias as $item) { $modelBC[] = $item->id_categoria; } }else{ $modelBC = null; } $modelBasesArchivos = BasesArchivos::model()->findAll(array('condition' => 'id_base_encuesta = '.$id )); if(!empty($modelBasesArchivos)){ foreach ($modelBasesArchivos as $item) { $modelBA[$item->id_tipo_archivo] = $item->archivo; } }else{ $modelBA = null; } // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if(isset($_POST['BasesEncuestas'])) { if($_POST['BasesEncuestas']['fecha']=="") $_POST['BasesEncuestas']['fecha'] = date('Y-m-d H:i:s'); $model->attributes=$_POST['BasesEncuestas']; if($model->save()){ if(isset($_POST['id_categoria'])){ $modelBasesCategorias = BasesCategorias::model()->deleteAll("id_base_encuesta = ".$model->id_encuesta_base); foreach($_POST['id_categoria'] as $registro){ $modelBasesCategorias = new BasesCategorias; $modelBasesCategorias->id_categoria = $registro; $modelBasesCategorias->id_base_encuesta = $model->id_encuesta_base; $modelBasesCategorias->save(); } //end for } if(isset($_FILES['archivos'])){ foreach ($_FILES['archivos']['error'] as $id => $error) { if ($error == UPLOAD_ERR_OK) { $filename = $_FILES['archivos']['name'][$id]; $nombre = $model->id_encuesta_base.'_'.str_replace(' ', '-', $filename); $modelBasesArchivos = BasesArchivos::model()->deleteAll("id_base_encuesta = ".$model->id_encuesta_base." AND id_tipo_archivo = ".$_POST['tipo_archivo'][$id]); $modelBasesArchivos = new BasesArchivos; $modelBasesArchivos->id_base_encuesta = $model->id_encuesta_base; $modelBasesArchivos->id_tipo_archivo = $_POST['tipo_archivo'][$id]; $modelBasesArchivos->archivo = $nombre; if($modelBasesArchivos->save()){ $nombre_tmp = $_FILES['archivos']['tmp_name'][$id]; move_uploaded_file($nombre_tmp, $_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/archivos/'.$nombre); $ubicacion = $_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/archivos/'.$nombre; //SI ES BD SE CREA LA BD if($modelBasesArchivos->id_tipo_archivo == 1){ //ELIMINAMOS LA TABLA DE HABER SIDO CREADA $nva_tbl = 'enc_'.$model->tabla; Yii::app()->funciones->deleteBD($model->tabla); Yii::app()->funciones->deleteBD($nva_tbl); $columnas = array(); $array_clm = array(); $array_data = array(); $columna = ''; $sql = ''; $fila = 1; $cantidad_clm = 0; $handle = fopen($ubicacion, "r"); while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { if($fila == 1){ $columnas = $data; $cantidad_clm = count($columnas); if($cantidad_clm > 0){ if($cantidad_clm > 1000){ $array_clm = array_slice($columnas, 0, 900); $varchar = 7; }else{ $array_clm = $columnas; $varchar = 400; } foreach ($array_clm as $key => $value) { $colum = strtolower($value); if(strlen($colum)>64){ $colum = substr($colum,0,63); $value = substr($colum,0,63); }; if($colum == "latitude" || $colum == "lat" || $colum == "latitud"){ $value = "Latitude"; } if($colum == "longitude" || $colum == "longitud" || $colum == "lng"){ $value = "Longitude"; } $array_clm[$key] = Yii::app()->funciones->cleanColumns(utf8_encode($value)); } //$columna = implode(' VARCHAR('.$varchar.') NOT NULL, ', $array_clm); $columna = implode(' TEXT NOT NULL, ', $array_clm); } Yii::app()->funciones->createDB($model->tabla, $columna, $varchar); }else{ if(count($data)>1000){ $array_data = array_slice($data, 0, 900); }else{ $array_data = $data; } foreach ($data as $key => $value) { if($value == ''){ $data[$key] = '-'; } } $columna = implode(', ', $array_clm); $value = implode('", "', $array_data); Yii::app()->funciones->insertDB($model->tabla, $columna, utf8_encode($value)); } $fila++; } fclose($handle); $connect = Yii::app()->db; $connect->createCommand("CREATE TABLE IF NOT EXISTS ".$nva_tbl."(id INT(11) NOT NULL AUTO_INCREMENT, encabezado VARCHAR(100) NOT NULL, nombre_corto VARCHAR(100) NOT NULL, descripcion VARCHAR(300) NOT NULL, mostrar TINYINT(2) DEFAULT '1', id_diccionario INT(11), ignorar VARCHAR(255), PRIMARY KEY(id))")->execute(); //Obtener valores a insertar en la tabla $dataReader = $connect->createCommand('SHOW COLUMNS FROM '.$model->tabla)->query(); while(($row = $dataReader->read())!==false){ //Insertar valores dentro de la tabla $connect->createCommand('INSERT INTO '.$nva_tbl.'(encabezado, nombre_corto, descripcion, mostrar, id_diccionario, ignorar) VALUES("'.$row['Field'].'", "'.$row['Field'].'", "'.$row['Field'].'", 1, NULL, "")')->execute(); }//end while }// END CREAR LA BD } }//END IF }//END FORECACH } //end isset($_FILES['archivos']) $this->redirect(array('index')); } } $this->render('update',array( 'model'=>$model, 'modelCategorias' => $modelCategorias, 'modelBC' => $modelBC, 'modelBA' => $modelBA, )); } /** * Deletes a particular model. * If deletion is successful, the browser will be redirected to the 'admin' page. * @param integer $id the ID of the model to be deleted */ public function actionDelete($id) { //if(!isset($_GET['ajax']))return false; $data=array("check"=>"0"); $dir=$_SERVER['DOCUMENT_ROOT'].Yii::app()->request->baseUrl.'/archivos'; $servername = "localhost"; $username = "sec_user"; $password = "Resilencia19@"; $dbname = "ppd"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT * FROM `tbl_bases_archivos` where id_base_encuesta=".$id; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while ($row = $result->fetch_assoc()) { if ($row['archivo']!='') { unlink($dir.'/'.$row['archivo']); } } } mysqli_close($conn); $model = $this->loadModel($id); $columnas = 'enc_'.$model->tabla; Yii::app()->funciones->deleteBD($model->tabla); Yii::app()->funciones->deleteBD($columnas); if($model->delete())$data=array("check"=>"1"); echo json_encode($data); exit(); } /** * Lists all models. */ public function actionIndex() { $model = BasesEncuestas::model()->findAll(); $this->render('index',array('model'=>$model,)); } /* *Cambia el estado de activo. */ public function actionActivo($id) { $model=$this->loadModel($id); //Importante tener declarado el campo activo //en el modelo de base de datos $activo=$model->activo; if($model->activo){ $model->activo=0; }else{ $model->activo=1; } $arrResp=array(); if($model->saveAttributes(array('activo'=>$model->activo))){ $arrResp=array( 'check'=>1, 'activo'=>$model->activo); }else{ $arrResp=array( 'check'=>0, 'activo'=>$activo); } echo json_encode($arrResp); Yii::App()->end(); } /** * Manages all models. */ public function actionAdmin() { $model=new BasesEncuestas('search'); $model->unsetAttributes(); // clear any default values if(isset($_GET['BasesEncuestas'])) $model->attributes=$_GET['BasesEncuestas']; $this->render('admin',array( 'model'=>$model, )); } /** * 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. * @param integer the ID of the model to be loaded */ public function loadModel($id) { $model=BasesEncuestas::model()->findByPk($id); if($model===null) throw new CHttpException(404,'The requested page does not exist.'); return $model; } /** * Performs the AJAX validation. * @param CModel the model to be validated */ protected function performAjaxValidation($model) { if(isset($_POST['ajax']) && $_POST['ajax']==='bases-encuestas-form') { echo CActiveForm::validate($model); Yii::app()->end(); } } /* *Recorre las encuestas existentes y crea *la tabla en donde se guardan los encabezados */ /*public function actionRecorrerEncuestas(){ //obtener todas las encuestas y sus tablas $tablas = array(); $model = BasesEncuestas::model()->findAll(); foreach ($model as $item) { $tablas[] = $item->tabla; } //Crear la tabla de encabezados para cada tabla de las encuestas... $connect = Yii::app()->db; foreach ($tablas as $id => $tbl) { $nva_tbl = 'enc_'.$tbl; Yii::app()->funciones->deleteBD($nva_tbl); $connect->createCommand("CREATE TABLE IF NOT EXISTS ".$nva_tbl."(id INT(11) NOT NULL AUTO_INCREMENT, encabezado VARCHAR(100) NOT NULL, nombre_corto VARCHAR(100) NOT NULL, descripcion VARCHAR(300) NOT NULL, mostrar TINYINT(2) DEFAULT '1', id_diccionario INT(11), PRIMARY KEY(id))")->execute(); //Obtener valores a insertar en la tabla $dataReader = $connect->createCommand('SHOW COLUMNS FROM '.$tbl)->query(); while(($row = $dataReader->read())!==false){ //Insertar valores dentro de la tabla $connect->createCommand('INSERT INTO '.$nva_tbl.'(encabezado, nombre_corto, descripcion, mostrar, id_diccionario) VALUES("'.$row['Field'].'", "'.$row['Field'].'", "'.$row['Field'].'", 1, "")')->execute(); } } print_r(Yii::app()->funciones->get_tables()); }*/ public function actionEditarEncabezados(){ //obtener todas las encuestas y sus tablas $tablas = array(); $model = BasesEncuestas::model()->findAll(); foreach ($model as $item) { $tablas[] = 'enc_'.$item->tabla; } //Crear la tabla de encabezados para cada tabla de las encuestas... $connect = Yii::app()->db; foreach ($tablas as $id => $tbl) { $connect->createCommand("ALTER TABLE ".$tbl." ADD ignorar VARCHAR(255) NULL AFTER id_diccionario")->execute(); } print_r(Yii::app()->funciones->get_tables()); } /* * */ public function actionEditColumns($id){ $modelEncuesta = $this->loadModel($id); $connect = Yii::app()->db; $tabla = 'enc_'.$modelEncuesta->tabla; $modelColumna = array(); $diccionarios = array(); $dataReader = $connect->createCommand('SELECT * FROM '.$tabla.' ORDER BY id ASC')->query(); while(($row = $dataReader->read())!==false){ $modelColumna[] = $row; } $modelDic = Diccionarios::model()->findAll(array('condition'=>'id_encuesta = 0 OR id_encuesta = '.$id, 'order'=>'nombre ASC')); foreach ($modelDic as $item) { $diccionarios[$item->id_diccionario] = $item->nombre; } //Guardar la información if(isset($_POST['submit'])){ $id_array = $_POST['id']; $mostrar = $_POST['mostrar']; $nom_corto = $_POST['nombre_corto']; $descripcion = $_POST['descripcion']; $diccionario = $_POST['id_diccionario']; $ignorar = $_POST['ignorar']; /*echo '
';
    		print_r($id_array);
    		print_r($mostrar);
    		print_r($nom_corto);
    		print_r($descripcion);
    		print_r($diccionario);
    		print_r($ignorar);
    		exit();*/

    		foreach ($id_array as $key => $valor) {

    			if(!isset($mostrar[$key])) $mtr = 0;
    			else $mtr = 1;

    			if(empty($ignorar[$key])) $igr = "";
    			else $igr =', ignorar = "'.$ignorar[$key].'"';

    			$connect->createCommand('UPDATE '.$tabla.' SET nombre_corto = "'.$nom_corto[$key].'", descripcion = "'.$descripcion[$key].'", mostrar = '.$mtr.', id_diccionario = '.$diccionario[$key].$igr.' WHERE id = '.$valor)->execute();
    		}

    		$this->redirect(array('index'));
    	}

    	$this->render('create',array('model'=>$modelColumna,
    								'nombre'=>$modelEncuesta->encuesta,
    								'diccionarios' => $diccionarios,
    								'id' => $id));
    }
}