public function actionIndex()
 {
     $modelo = new ExportarForm();
     if (isset($_POST['ExportarForm'])) {
         $modelo->attributes = $_POST['ExportarForm'];
         //Además de validar el propio modeloo, se deberán validar también las tablas (que al menos haya una marcada)
         if ($modelo->validate() && $modelo->validarTablas()) {
             //Guardamos un array booleano con que tablas deben ser guardadas
             $tablas = array($modelo->aseguradoras, $modelo->authassignment, $modelo->authitem, $modelo->authitemchild, $modelo->facturas, $modelo->pacientes, $modelo->perfiles, $modelo->perfilesusuarios, $modelo->pruebas, $modelo->tiposdiagnosticos, $modelo->usuarios, $modelo->visitas);
             //Comprobamos si hay que exportar en SQL o XML
             if ($modelo->opcion) {
                 CopiaDeSeguridad::exportarSQL($tablas, true);
             } else {
                 CopiaDeSeguridad::exportarXML($tablas);
             }
         } else {
             Yii::app()->user->setFlash('error', 'Debes elegir al menos una tabla');
         }
     }
     $this->render('index', array('exportar' => $modelo));
 }
 public function actionIndex()
 {
     $modelo = new ExportarForm();
     if (isset($_POST['ExportarForm'])) {
         $modelo->attributes = $_POST['ExportarForm'];
         //Además de validar el propio modeloo, se deberán validar también las tablas (que al menos haya una marcada)
         if ($modelo->validate() && $modelo->validarTablas()) {
             //Guardamos un array booleano con que tablas deben ser guardadas
             $tablas = array($modelo->authassignment, $modelo->authitem, $modelo->authitemchild, $modelo->autor, $modelo->categoria, $modelo->cliente, $modelo->configuracion, $modelo->editorial, $modelo->estado, $modelo->forma_pago, $modelo->idioma, $modelo->libro, $modelo->libro_autor, $modelo->libro_categoria, $modelo->linea, $modelo->nacionalidad, $modelo->pedido, $modelo->usuario);
             //Comprobamos si hay que exportar en SQL o XML
             if ($modelo->opcion) {
                 CopiaDeSeguridad::exportarSQL($tablas, true);
             } else {
                 CopiaDeSeguridad::exportarXML($tablas);
             }
         } else {
             Yii::app()->user->setFlash('error', 'Debes elegir al menos una tabla');
         }
     }
     $this->render('index', array('exportar' => $modelo));
 }
 public function actionIndex()
 {
     $modelo = new ImportarForm();
     if (isset($_POST['datos'])) {
         //Activamos el escenario de la segunda pantalla
         $modelo->scenario = 'conArchivo';
     } elseif (isset($_POST['estructura'])) {
         CopiaDeSeguridad::importarSQL(Yii::app()->basePath . '/data/estructuraTablas.sql');
         Yii::app()->user->setFlash('informacion', 'Se ha importado correctamente la estructura de la base de datos');
     } elseif (isset($_POST['importarDatos'])) {
         //Recogemos la instancia del archivo subido
         $modelo->archivo = CUploadedFile::getInstance($modelo, 'archivo');
         //Guardamos en variables la ruta del archivo y la extensión
         $ruta = Yii::app()->basePath . '/runtime/' . strtolower($modelo->archivo);
         $archivoPartido = explode(".", strtolower($modelo->archivo));
         $extension = end($archivoPartido);
         //Subimos el archivo al servidor
         $modelo->archivo->saveAs($ruta);
         //Importamos el archivo eligiendo si es xml o sql
         if ($extension == 'xml') {
             if (CopiaDeSeguridad::importarXML($ruta, $modelo->foraneas)) {
                 Yii::app()->user->setFlash('informacion', 'Los datos del archivo XML han sido importados correctamente');
             }
         } elseif ($extension == 'sql') {
             if (CopiaDeSeguridad::importarSQL($ruta)) {
                 Yii::app()->user->setFlash('informacion', 'Los datos del archivo SQL han sido importados correctamente');
             }
         } else {
             Yii::app()->user->setFlash('error', 'Error: El archivo importado debe ser xml o sql');
         }
         //Borramos el archivo
         $borrado = unlink($ruta);
         while (!$borrado) {
             unlink($ruta);
         }
     } elseif (isset($_POST['ImportarForm'])) {
         $modelo->attributes = $_POST['ImportarForm'];
     }
     $this->render('index', array('modelo' => $modelo));
 }
 public static function importarSQL($archivo)
 {
     try {
         //Instanciamos la base de datos
         $bbDD = Yii::app()->db->pdoInstance;
         if (file_exists($archivo)) {
             //Exportamos el estado actual de la base de datos
             CopiaDeSeguridad::exportarSQL(array(true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true), false);
             //Desactivamos las claves foráneas para evitar un error de este tipo
             $bbDD->query("SET FOREIGN_KEY_CHECKS=0;");
             //Recogemos las órdenes del archivo SQL y las preparamos
             $ordenSQL = file_get_contents($archivo);
             $ordenSQL = rtrim($ordenSQL);
             $nuevaOrden = preg_replace_callback("/\\((.*)\\)/", create_function('$matches', 'return str_replace(";"," $$$ ", $matches[0]);'), $ordenSQL);
             $arraySQL = explode(";", $nuevaOrden);
             //Recorremos cada una de las órdenes
             foreach ($arraySQL as $valor) {
                 //Vamos procesando cada órden que nos encontremos
                 if (!empty($valor)) {
                     $sql = str_replace(" \$\$\$ ", ";", $valor) . ";";
                     $bbDD->exec($sql);
                 }
             }
             //Borramos el archivo
             $borrado = unlink(Yii::app()->basePath . '/runtime/temporal.sql');
             return true;
         } else {
             Yii::app()->user->setFlash('error', "Error: El archivo no existe");
             return false;
         }
     } catch (PDOException $excepcion) {
         Yii::app()->user->setFlash('error', "Error: " . $excepcion->getMessage());
         //Restablecemos la base de datos a su estado anterior
         CopiaDeSeguridad::importarSQL(Yii::app()->basePath . '/runtime/temporal.sql');
         //Borramos el archivo
         $borrado = unlink(Yii::app()->basePath . '/runtime/temporal.sql');
         return false;
     }
 }