Example #1
0
 protected function generar_archivo()
 {
     $php = $this->get_codigo_php();
     toba_manejador_archivos::crear_archivo_con_datos($this->archivo_absoluto(), "<?php" . "\n" . $php . "\n" . "?>");
     $this->asistente->registrar_elemento_creado('archivo', $this->proyecto, $this->archivo_relativo());
     return true;
 }
Example #2
0
 function clonar_subclase($dr, $dir_subclases, $proyecto_dest)
 {
     if (isset($this->datos['subclase_archivo'])) {
         $filas = $dr->tabla('pantallas')->get_id_fila_condicion(array('pantalla' => $this->datos['pantalla']), false);
         if (count($filas) != 1) {
             throw new toba_error_modelo("Imposible clonar subclase de pantalla {$this->datos['pantalla']}");
         }
         $fila = current($filas);
         $archivo = $this->datos['subclase_archivo'];
         $nuevo_archivo = $dir_subclases . "/" . basename($archivo);
         $id_pm_origen = $this->get_punto_montaje();
         $id_pm_destino = $dr->tabla('base')->get_fila_columna(0, 'punto_montaje');
         //Busco los directorios de copia utilizando los puntos de montaje
         $path_origen = $this->get_path_clonacion($id_pm_origen, $this->proyecto);
         $path_destino = $this->get_path_clonacion($id_pm_destino, $proyecto_dest, $path_origen);
         //--- Si el dir. destino no existe, se lo crea
         if (!file_exists($path_destino . $dir_subclases)) {
             toba_manejador_archivos::crear_arbol_directorios($path_destino . $dir_subclases);
         }
         if (!copy($path_origen . $archivo, $path_destino . $nuevo_archivo)) {
             throw new toba_error('No es posible copiar el archivo desde ' . $path_origen . $archivo . ' hacia ' . $path_destino . $nuevo_archivo);
         }
         $dr->tabla('pantallas')->set_fila_columna_valor($fila, 'subclase_archivo', $nuevo_archivo);
     }
 }
 protected function imprimir($texto)
 {
     if (toba_manejador_archivos::es_windows() && function_exists('iconv')) {
         $this->_log .= iconv('latin1', 'IBM850', $texto);
     } else {
         $this->_log .= $texto;
     }
 }
Example #4
0
 function guardar($path)
 {
     if (!file_exists(dirname($path))) {
         toba_manejador_archivos::crear_arbol_directorios(dirname($path));
     }
     $ok = file_put_contents($path, $this->salida);
     if ($ok === false) {
         throw new toba_error("Imposible guardar archivo '{$path}'");
     }
 }
Example #5
0
 function generar_layout()
 {
     $selecciones = $this->controlador->get_selecciones();
     echo "<div style='background-color: white; border: 1px solid black; text-align: left; padding: 15px'>";
     try {
         //Se construye un suite por categoria que tenga test seleccionados
         foreach (toba_test_lista_casos::get_categorias() as $categoria) {
             $test = new GroupTest($categoria['nombre']);
             $hay_uno = false;
             foreach (toba_test_lista_casos::get_casos() as $caso) {
                 if ($caso['categoria'] == $categoria['id'] && in_array($caso['id'], $selecciones['casos'])) {
                     $hay_uno = true;
                     require_once $caso['archivo'];
                     $test->addTestCase(new $caso['id']($caso['nombre']));
                 }
             }
             if ($hay_uno) {
                 //--- COBERTURA DE CODIGO (OPCIONAL) ----
                 if (function_exists('xdebug_start_code_coverage')) {
                     xdebug_start_code_coverage();
                 }
                 //-------
                 $test->run(new toba_test_reporter());
                 //--- COBERTURA DE CODIGO (OPCIONAL) ----
                 $arch = 'PHPUnit2/Util/CodeCoverage/Renderer.php';
                 $existe = toba_manejador_archivos::existe_archivo_en_path($arch);
                 if (function_exists('xdebug_start_code_coverage') && $existe) {
                     require_once $arch;
                     $cubiertos = xdebug_get_code_coverage();
                     //Se limpian las referencias a simpletest y a librerias de testing en gral.
                     $archivos = array();
                     foreach (array_keys($cubiertos) as $archivo) {
                         if (!strpos($archivo, 'simpletest') && !strpos($archivo, 'PHPUnit') && !strpos($archivo, 'testing_automatico/') && !strpos($archivo, '/test_')) {
                             $archivos[$archivo] = $cubiertos[$archivo];
                         }
                     }
                     $cc = PHPUnit2_Util_CodeCoverage_Renderer::factory('HTML', array('tests' => $archivos));
                     $path_temp = toba::proyecto()->get_path_temp_www();
                     $salida = $path_temp['real'] . '/cobertura.html';
                     $cc->renderToFile($salida);
                     echo "<a href='{$path_temp['browser']}/cobertura.html' target='_blank'>Ver cobertura de código</a>";
                 }
                 //-------
             }
         }
     } catch (Exception $e) {
         if (method_exists($e, 'mensaje_web')) {
             echo ei_mensaje($e->mensaje_web(), 'error');
         } else {
             echo $e;
         }
     }
     echo '</div><br>';
     $this->dep('lista_archivos')->generar_html();
 }
Example #6
0
 protected function crear_archivo($archivo, $clase)
 {
     $php = '<?php' . salto_linea();
     $php .= salto_linea();
     $php .= "class {$clase}" . salto_linea();
     $php .= '{' . salto_linea();
     $php .= salto_linea();
     $php .= '}' . salto_linea();
     $php .= salto_linea();
     $php .= '?>';
     toba_manejador_archivos::crear_archivo_con_datos($archivo, $php);
 }
Example #7
0
 function conf__cuadro(toba_ei_cuadro $cuadro)
 {
     $path = toba::proyecto()->get_path() . '/exportaciones/jasper';
     $archivos = toba_manejador_archivos::get_archivos_directorio($path, '/.jasper$/', true);
     $datos = array();
     $i = 0;
     foreach ($archivos as $archivo) {
         $this->s__paths[$i] = $archivo;
         $datos[$i]['path'] = $i;
         $datos[$i]['reporte'] = ucwords(str_replace('_', ' ', basename($archivo, '.jasper')));
         $i++;
     }
     $cuadro->set_datos($datos);
 }
Example #8
0
 function proyecto__copiar_punto_acceso()
 {
     $dir_destino = $this->elemento->get_dir() . '/www/';
     $destino_final = toba_manejador_archivos::path_a_plataforma($dir_destino . 'servicios.php');
     $origen = toba_dir() . '/php/modelo/template_proyecto/www/servicios.php';
     if (!toba_manejador_archivos::existe_archivo_en_path($destino_final)) {
         $template = file_get_contents($origen);
         //Leo el template original
         $editor = new toba_editor_texto();
         $editor->agregar_sustitucion('|__proyecto__|', $this->elemento->get_id());
         $salida = $editor->procesar($template);
         file_put_contents($destino_final, $salida, FILE_APPEND);
     }
 }
 function __construct($estandar = 'Toba', $warnings = true)
 {
     $this->warnings = $warnings;
     if ($estandar == 'Toba') {
         $this->estandar = toba_dir() . '/php/convenciones/Toba';
         $this->estandar = toba_manejador_archivos::path_a_plataforma($this->estandar);
     } else {
         $this->estandar = $estandar;
     }
     $this->sniffer = new PHP_CodeSniffer(0);
     if (!$this->sniffer->isInstalledStandard($this->estandar)) {
         throw new toba_error("El estandar '{$this->estandar}' no esta instalado");
     }
 }
Example #10
0
 function conf__cuadro(toba_ei_cuadro $cuadro)
 {
     $archivos = toba::memoria()->get_dato_instancia('previsualizacion_archivos');
     if (!isset($archivos)) {
         throw new toba_error('No se encontraron los archivos a mostrar');
     }
     $path_proyecto = toba_manejador_archivos::path_a_unix(toba::instancia()->get_path_proyecto(toba_editor::get_proyecto_cargado()));
     $path_php = $path_proyecto . '/php/';
     $cuadro->set_formateo_columna('tamano', 'tamano', 'formateo_tamano');
     $datos = array();
     foreach ($archivos as $i => $archivo) {
         $datos[$i]['path'] = substr($archivo, strlen($path_proyecto) + 1);
         $datos[$i]['tamano'] = filesize($archivo);
     }
     $cuadro->set_datos($datos);
 }
Example #11
0
 static function generar_html_listado()
 {
     toba::memoria()->desactivar_reciclado();
     $src = toba::memoria()->get_parametro('imagen');
     $recursivo = toba::memoria()->get_parametro('recursivo');
     $origen = toba::memoria()->get_parametro('imagen_recurso_origen');
     $url = admin_util::url_imagen_de_origen('', $origen);
     $dir = admin_util::dir_imagen_de_origen('', $origen);
     echo "<div id='editor_imagen_opciones'>";
     echo "Filtro: <input id='editor_imagen_filtro' onkeyup='filtrar_imagenes(this.value)' type='text' /> ";
     $checkeado = $recursivo ? 'checked' : '';
     echo "<label><input type='checkbox'  onclick='recargar(this.checked ? 1 : 0)' {$checkeado} /> Recursivo</label>";
     echo '</div><hr />';
     echo "<div id='editor_imagen_listado'>";
     echo '<table>';
     $temp = toba_manejador_archivos::get_archivos_directorio($dir, '/(.)png|(.)gif|(.)jpg|(.)jpeg/', $recursivo);
     $archivos = array();
     foreach ($temp as $archivo) {
         if (strpos($archivo, '/tabs/') === false) {
             $archivos[] = $archivo;
         }
     }
     sort($archivos);
     $columnas = 3;
     $cant = 1;
     $total = count($archivos);
     foreach ($archivos as $archivo) {
         if ($cant % $columnas == 1) {
             echo '<tr>';
         }
         $relativo = substr($archivo, strlen($dir) + 1);
         $archivo = basename($relativo);
         echo "<td title='Seleccionar imagen' imagen='{$relativo}' onclick='seleccionar_imagen(this.getAttribute(\"imagen\"))'>\n\t\t\t\t\t<img nohack='1' src='" . $url . '/' . $relativo . "' />\n\t\t\t\t\t<div>{$archivo}</div>\n\t\t\t\t</td>\n";
         if ($cant % $columnas == 0) {
             echo "</tr>\n";
         }
         $cant++;
     }
     if ($cant % $columnas != 0) {
         echo "</tr>\n";
     }
     echo '</table></div>';
 }
Example #12
0
 function conf__cuadro(toba_ei_cuadro $cuadro)
 {
     if (!isset($this->s__datos) || $this->filtrar) {
         $carpeta = toba::instancia()->get_path_proyecto(toba_editor::get_proyecto_cargado()) . '/php';
         $carpeta = toba_manejador_archivos::path_a_plataforma($carpeta);
         $extra = '';
         if (isset($this->s__filtro['nombre'])) {
             $extra = "{$this->s__filtro['nombre']}.*";
         }
         $archivos = toba_manejador_archivos::get_archivos_directorio($carpeta, "/{$extra}\\.php\$/", true);
         $modelo = toba_editor::get_modelo_proyecto();
         $estandar = $modelo->get_estandar_convenciones();
         $datos = array();
         foreach ($archivos as $archivo) {
             $path_relativo = substr($archivo, strlen($carpeta) + 1);
             $nombre = basename($archivo);
             if (strlen($nombre) > 30) {
                 $nombre = substr($nombre, 0, 30) . '...';
             }
             $info = array('archivo' => $nombre, 'path' => $path_relativo);
             if (isset($this->s__filtro['convenciones']) && $this->s__filtro['convenciones']) {
                 $errores = $estandar->validar(array($archivo));
                 $info['errores'] = $errores['totals']['errors'];
                 $info['warnings'] = $errores['totals']['warnings'];
             }
             $datos[] = $info;
         }
         $this->s__datos = rs_ordenar_por_columna($datos, 'archivo');
     }
     if (isset($this->s__filtro['convenciones']) && $this->s__filtro['convenciones']) {
         $columnas = array();
         $columnas[0]['clave'] = 'errores';
         $columnas[0]['titulo'] = toba_recurso::imagen_toba('error.gif', true);
         $columnas[0]['estilo'] = 'col-num-p1';
         $columnas[1]['clave'] = 'warnings';
         $columnas[1]['titulo'] = toba_recurso::imagen_toba('warning.gif', true);
         $columnas[1]['estilo'] = 'col-num-p1';
         $cuadro->agregar_columnas($columnas);
     }
     $cuadro->desactivar_modo_clave_segura();
     $cuadro->set_datos($this->s__datos);
 }
Example #13
0
 /**
  * @ignore 
  */
 function disparar_eventos()
 {
     if (isset($_POST[$this->_submit]) && $_POST[$this->_submit] != "") {
         $evento = $_POST[$this->_submit];
         //El evento estaba entre los ofrecidos?
         if (isset($this->_memoria['eventos'][$evento])) {
             $parametros = $_POST[$this->_submit . "__seleccion"];
             switch ($evento) {
                 case 'ir_a_carpeta':
                     if ($parametros == '..') {
                         //volver una carpeta
                         $seleccion = dirname($this->_dir_actual) . "/";
                     } else {
                         $seleccion = $this->_dir_actual . "/{$parametros}";
                     }
                     //--- Chequeo de seguridad
                     if (isset($this->_path_absoluto)) {
                         if (strpos(realpath($seleccion), realpath($this->_path_absoluto)) !== 0) {
                             throw new toba_error_seguridad("El path es invalido");
                         }
                     }
                     $this->_dir_actual = toba_manejador_archivos::path_a_unix(realpath($seleccion));
                     $this->reportar_evento($evento, $seleccion);
                     break;
                 case 'crear_carpeta':
                     $this->validar_nombre_carpeta($parametros);
                     $seleccion = $this->_dir_actual . "/{$parametros}";
                     toba_manejador_archivos::crear_arbol_directorios($seleccion);
                     break;
                 case 'crear_archivo':
                     $this->validar_nombre_archivo($parametros);
                     $seleccion = $this->_dir_actual . "/{$parametros}";
                     toba_manejador_archivos::crear_archivo_con_datos($seleccion, "");
                     break;
                 default:
                     $this->reportar_evento($evento, $seleccion);
             }
         }
     }
     $this->borrar_memoria_eventos_atendidos();
 }
 /**
  * La clonacion del DR puede implicar clonar su AP
  */
 protected function clonar_subclase($dr, $dir_subclases, $proyecto_dest)
 {
     parent::clonar_subclase($dr, $dir_subclases, $proyecto_dest);
     if (isset($this->datos['_info_estructura']['ap_archivo'])) {
         $archivo = $this->datos['_info_estructura']['ap_archivo'];
         $nuevo_archivo = $dir_subclases . "/" . basename($archivo);
         $id_pm_origen = $this->get_punto_montaje();
         $id_pm_destino = $dr->tabla('base')->get_fila_columna(0, 'punto_montaje');
         //Busco los directorios de copia utilizando los puntos de montaje
         $path_origen = $this->get_path_clonacion($id_pm_origen, $this->proyecto);
         $path_destino = $this->get_path_clonacion($id_pm_destino, $proyecto_dest, $path_origen);
         $dr->tabla('prop_basicas')->set_fila_columna_valor(0, 'ap_archivo', $nuevo_archivo);
         //--- Si el dir. destino no existe, se lo crea
         if (!file_exists($path_destino . $dir_subclases)) {
             toba_manejador_archivos::crear_arbol_directorios($path_destino . $dir_subclases);
         }
         if (!copy($path_origen . $archivo, $path_destino . $nuevo_archivo)) {
             throw new toba_error('No es posible copiar el archivo desde ' . $path_origen . $archivo . ' hacia ' . $path_destino . $nuevo_archivo);
         }
     }
 }
Example #15
0
function controlar_usuario()
{
    $usuario_actual = toba_manejador_archivos::get_usuario_actual();
    if (isset($usuario_actual)) {
        $usuarios_defecto = array('system', 'www-data', 'wwwrun', 'nobody', 'nobody');
        if (in_array($usuario_actual, $usuarios_defecto)) {
            $html = "<div style='margin-top: 100px; background-color:white; padding: 10px;'>\n\t\t\t\t\t<strong>Recomendado cambiar usuario APACHE</strong><br><br>\n\t\t\t\t\t<div style='text-align:left'><p>Actualmente el servidor web (incluyendo a PHP y Toba) se está ejecutando con el usuario <strong>{$usuario_actual}</strong> del sistema.\n\t\t\t\t\t\t\tPor seguridad esta configuración es la recomendada para sistemas en <strong>producción</strong>.</p>\n\t\t\t\t\t\t<p>En cambio para ambientes de <strong>desarrollo</strong>, este toba_editor necesita abrir y guardar archivos, ejecutar comandos svn, etc,\n\t\t\t\t\t\t\tnecesita correr con el <strong>usuario de escritorio</strong> actualmente logueado al sistema operativo. Por ello recomendamos seguir los siguentes pasos:</p>\n\t\t\t";
            if (toba_manejador_archivos::es_windows()) {
                $html .= "\n\t\t\t\t\t\t<ol style='background-color: #EEEEEE; border: 1px inset gray;'>\n\t\t\t\t\t\t\t<li>Primero es necesario que el usuario actualmente logueado posea una contraseña. Si no la tiene o desconoce:\n\t\t\t\t\t\t\t\t<ol style='background-color: #E9E8E8; border: 1px inset gray; margin: 10px;'>\n\t\t\t\t\t\t\t\t\t<li>Ir a <em>Inicio > Ejecutar</em>, ingresar\n\t\t\t\t\t\t\t\t\t\t<pre>lusrmgr.msc</pre>\n\t\t\t\t\t\t\t\t\t<li>Hacer click derecho sobre el usuario actual y seleccionar <em>Establecer contraseña</em>\n\t\t\t\t\t\t\t\t\t<li>Luego de pasar todas las advertencias, ingresar la contraseña y aceptar\n\t\t\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t\t<li>Ir a <em>Inicio > Ejecutar</em>, ingresar\n\t\t\t\t\t\t\t\t<pre>services.msc</pre>\n\t\t\t\t\t\t\t<li>Seleccionar servicio Apache 2.x, hacer doble click sobre el mismo\n\t\t\t\t\t\t\t<li>Ir a solapa <em>Iniciar Sesión</em>\n\t\t\t\t\t\t\t<li>Seleccionar <em>Esta cuenta</em> e ingresar el nombre y contraseña de la cuenta de usuario actual.\n\t\t\t\t";
            } else {
                $html .= "\n\t\t\t\t\t\t<ol style='background-color: #EEEEEE; border: 1px inset gray;'>\n\t\t\t\t\t\t\t<li>Configurar que apache ejecute con el usuario actualmente logueado al sistema de ventanas. Editar el archivo\n\t\t\t\t\t\t\t\t<em>/etc/apache2/apache2.conf</em> o <em>/etc/apache2/uid.conf</em> si está presente y cambiar el usuario de la siguiente directiva\n\t\t\t\t\t\t\t\tpor el usuario actual: <pre>User {$usuario_actual}</pre>\n\t\t\t\t\t\t\t<li>Para que apache pueda crear sesiones PHP, hay que cambiar el owner de la carpeta de sesiones (si no encuentra la carpeta de sesiones de php, está en la\n\t\t\t\t\t\t\t\tdirectiva <em>session.save_path</em> en el php.ini\n\t\t\t\t\t\t\t\t<pre>sudo chown mi_usuario /var/lib/php5 -R</pre>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t";
            }
            $html .= '
						<li>Luego de aceptar, reiniciar el servicio apache. En caso de que se siga mostrando esta advertencia al inicio del editor, por favor
							contactarse con el soporte de toba ya que es muy importante para nosotros que estos pasos se sigan y funcionen bien.
					</ol>
					</div></div>
			';
            echo $html;
        }
    }
}
Example #16
0
 function evt__form_paleta__generar($datos)
 {
     $this->evt__form_paleta__modificacion($datos);
     $datos = $this->dep('datos')->get();
     $paleta = unserialize($datos['paleta']);
     $template = file_get_contents($this->template);
     if ($datos['proyecto'] == 'toba') {
         $dir_salida = toba_dir();
     } else {
         $dir_salida = toba::instancia()->get_path_proyecto($datos['proyecto']);
     }
     $dir_salida = $dir_salida . '/www/skins/' . $datos['estilo'];
     if (!file_exists($dir_salida)) {
         toba_manejador_archivos::crear_arbol_directorios($dir_salida);
     }
     $archivo_salida = $dir_salida . '/toba.css';
     foreach ($paleta as $clave => $valor) {
         $template = str_replace('{$' . $clave . '}', $valor, $template);
     }
     file_put_contents($archivo_salida, $template);
     $this->pantalla()->set_descripcion('Plantilla css generada. Recuerde generar una imagen <b>barra-sup.gif</b> (o copiarlo de un skin existente) ' . "y guardarla en <b>{$dir_salida}</b>", 'warning');
     $this->dep('datos')->sincronizar();
 }
Example #17
0
 /**
  *  Importa la personalización que está en el directorio personalización del proyecto
  * @consola_parametros Opcional: [-t] Ejecuta toda la importacion dentro de una transaccion
  */
 function opcion__importar()
 {
     $p = $this->get_proyecto();
     //Verificar que se haya ejecutado si o si la opcion de conflicto
     $archivo = $p->get_dir() . '/temp/conflictos_verificados.mrk';
     $verifico_conflictos = toba_manejador_archivos::existe_archivo_en_path($archivo);
     if (!$verifico_conflictos) {
         $this->consola->mensaje('Antes de realizar la importación debe ejecutar el comando \'conflictos\'');
         return;
     }
     $this->consola->mensaje('Importando la personalizacion...');
     $pers = new toba_personalizacion($p, $this->consola);
     //Verifico si la ejecucion se quiere hacer dentro de una transaccion.
     $param = $this->get_parametros();
     if (isset($param['-t'])) {
         $pers->set_ejecucion_con_transaccion_global();
     }
     //Aplico la personalizacion
     $pers->aplicar();
     $this->consola->mensaje('Proceso Finalizado');
     //Elimino la marca  de conflictos para que no pueda volver a ejecutarse la importacion.
     unlink($archivo);
 }
Example #18
0
 /**
  * Retorna todas las migraciones disponibles desde la actual hasta la versión parametro
  *
  * @param toba_version $hasta
  * @param string $path_migraciones Path opcional de donde se ubican las migraciones (solo para tests)
  */
 function get_secuencia_migraciones($hasta, $path_migraciones = null)
 {
     if (!isset($path_migraciones)) {
         $dir = $this->path_migraciones();
     } else {
         $dir = $path_migraciones;
     }
     $exp = "/migracion_(.+)\\.php/";
     $archivos = toba_manejador_archivos::get_archivos_directorio($dir, $exp, false);
     $versiones = array();
     foreach ($archivos as $archivo) {
         $partes = array();
         preg_match($exp, $archivo, $partes);
         $numero = str_replace('_', '.', $partes[1]);
         $version = new toba_version($numero);
         if ($this->es_menor($version) && $hasta->es_mayor_igual($version)) {
             $versiones[] = $version;
         }
     }
     usort($versiones, array('toba_version', 'comparar_versiones'));
     return $versiones;
 }
Example #19
0
 static function crear_arbol_personalizacion($path_proyecto)
 {
     $path_pers = $path_proyecto . '/' . toba_personalizacion::dir_personalizacion;
     $path_logs = $path_pers . '/' . toba_personalizacion::dir_logs;
     $path_php = $path_pers . '/' . toba_personalizacion::dir_php;
     $path_www = $path_pers . '/' . toba_personalizacion::dir_www;
     $path_img = $path_pers . '/' . toba_personalizacion::dir_www . '/img';
     $path_css = $path_pers . '/' . toba_personalizacion::dir_www . '/css';
     $path_ext = $path_pers . '/php/extension_toba/componentes';
     $archivo_css = $path_pers . '/' . toba_personalizacion::dir_www . '/css/toba.css';
     $archivo_ini = $path_pers . '/' . toba_personalizacion::archivo_ini;
     toba_manejador_archivos::crear_arbol_directorios($path_pers);
     toba_manejador_archivos::crear_arbol_directorios($path_logs);
     toba_manejador_archivos::crear_arbol_directorios($path_php);
     toba_manejador_archivos::crear_arbol_directorios($path_www);
     toba_manejador_archivos::crear_arbol_directorios($path_img);
     toba_manejador_archivos::crear_arbol_directorios($path_css);
     toba_manejador_archivos::crear_arbol_directorios($path_ext);
     toba_manejador_archivos::crear_archivo_con_datos($archivo_ini, toba_personalizacion::iniciada . ' = no');
     toba_manejador_archivos::crear_archivo_con_datos($archivo_css, "/*\nIncluir aquí las reglas css personalizadas del proyecto\n*/");
 }
Example #20
0
 /**
  * Ejecuta una instalacion completa del framework para desarrollar un nuevo proyecto
  * @consola_parametros Opcionales: [-d 'iddesarrollo'] [-t 0| 1] [-n 'nombre inst'] [-h 'ubicacion bd'] [-p 'puerto'] [-u 'usuario bd'] [-b nombre bd] [-c 'archivo clave bd'] [-k 'archivo clave toba'] [--no-interactive].
  * @gtk_icono instalacion.png
  */
 function opcion__instalar()
 {
     $nombre_toba = 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release('_');
     $alias = '/' . 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release();
     $this->consola->titulo("Instalacion Toba " . toba_modelo_instalacion::get_version_actual()->__toString());
     //--- Verificar instalacion
     /*
     		if (get_magic_quotes_gpc()) {
     			$this->consola->mensaje("------------------------------------");
     			throw new toba_error("ERROR: Necesita desactivar las 'magic_quotes_gpc' en el archivo php.ini (ver http://www.php.net/manual/es/security.magicquotes.disabling.php)");	
     		}*/
     if (!extension_loaded('pdo')) {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: Necesita activar la extension 'pdo' en el archivo php.ini");
     }
     if (!extension_loaded('pdo_pgsql')) {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: Necesita activar la extension 'pdo_pgsql' en el archivo php.ini");
     }
     $version_php = shell_exec('php -v');
     if ($version_php == '') {
         $this->consola->mensaje("------------------------------------");
         throw new toba_error("ERROR: El comando 'php' no se encuentra en el path actual del sistema");
     }
     $param = $this->get_parametros();
     $interactive = !isset($param['--no-interactive']);
     if (isset($param['help'])) {
         $this->mostrar_ayuda_desatendida();
         return;
     }
     //--- Borra la instalacion anterior??
     if (toba_modelo_instalacion::existe_info_basica()) {
         toba_modelo_instalacion::borrar_directorio();
     }
     //--- Crea la INSTALACION
     $id_desarrollo = isset($param['-d']) ? $param['-d'] : $this->definir_id_grupo_desarrollo();
     $tipo_instalacion = isset($param['-t']) ? $param['-t'] : $this->definir_tipo_instalacion_produccion();
     $nombre = isset($param['-n']) ? $param['-n'] : $this->definir_nombre_instalacion();
     toba_modelo_instalacion::crear($id_desarrollo, $alias, $nombre, $tipo_instalacion);
     $id_instancia = $tipo_instalacion == '1' ? 'produccion' : $this->get_entorno_id_instancia(true);
     //--- Crea la definicion de bases
     $base = $nombre_toba;
     $puerto = '5432';
     //Asumo el puerto por defecto del servidor;
     if (!$this->get_instalacion()->existe_base_datos_definida($base)) {
         do {
             $profile = $this->recuperar_parametro($param, '-h', 'PostgreSQL - Ubicación (ENTER utilizará localhost)');
             if (trim($profile) == '') {
                 $profile = 'localhost';
             }
             $puerto_tmp = $this->recuperar_parametro($param, '-p', "PostgreSQL - Puerto (ENTER utilizará: {$puerto})");
             if (trim($puerto_tmp) != '') {
                 $puerto = $puerto_tmp;
             }
             $usuario = $this->recuperar_parametro($param, '-u', 'PostgreSQL - Usuario (ENTER utilizará postgres)');
             if (trim($usuario) == '') {
                 $usuario = 'postgres';
             }
             if (!isset($param['-c'])) {
                 $clave = $this->consola->dialogo_ingresar_texto('PostgreSQL - Clave  (ENTER para usar sin clave)', false);
             } else {
                 $clave = $this->recuperar_contenido_archivo($param['-c']);
             }
             $base_temp = $this->recuperar_parametro($param, '-b', "PostgreSQL - Base de datos (ENTER utilizará {$base})");
             if (trim($base_temp) != '') {
                 $base = $base_temp;
             }
             $datos = array('motor' => 'postgres7', 'profile' => $profile, 'usuario' => $usuario, 'clave' => $clave, 'base' => $base, 'puerto' => $puerto, 'encoding' => 'LATIN1', 'schema' => $id_instancia);
             $this->get_instalacion()->agregar_db($base, $datos);
             $puede_conectar = true;
             if ($interactive) {
                 //--- Intenta conectar al servidor
                 $puede_conectar = $this->get_instalacion()->existe_base_datos($base, array('base' => 'template1'), true);
                 if ($puede_conectar !== true) {
                     $this->consola->mensaje("\nNo es posible conectar con el servidor, por favor reeingrese la información de conexión. Mensaje:");
                     $this->consola->mensaje($puede_conectar . "\n");
                     sleep(1);
                 }
             }
         } while ($puede_conectar !== true);
     }
     //--- Pido el password para el usuario por defecto
     if (!isset($param['-k'])) {
         $pwd = $this->definir_clave_usuario_admin();
     } else {
         $pwd = $this->recuperar_contenido_archivo($param['-k']);
     }
     //--- Si la base existe, pregunta por un nombre alternativo, por si no quiere pisarla
     if ($interactive && $this->get_instalacion()->existe_base_datos($base, array(), false, $id_instancia)) {
         $nueva_base = $this->consola->dialogo_ingresar_texto("La base '{$base}' ya contiene un schema '{$id_instancia}', puede ingresar un nombre " . "de base distinto sino quiere sobrescribir los datos actuales: (ENTER sobrescribe la actual)", false);
         if ($nueva_base != '') {
             $datos['base'] = $nueva_base;
             $this->get_instalacion()->agregar_db($base, $datos);
         }
     }
     //--- Crea la instancia
     $proyectos = toba_modelo_proyecto::get_lista();
     if (isset($proyectos['toba_testing'])) {
         //--- Elimina el proyecto toba_testing
         unset($proyectos['toba_testing']);
     }
     if (isset($proyectos['curso_intro'])) {
         //--- Elimina el proyecto curso_intro
         unset($proyectos['curso_intro']);
     }
     toba_modelo_instancia::crear_instancia($id_instancia, $base, $proyectos);
     //-- Carga la instancia
     $instancia = $this->get_instancia($id_instancia);
     $instancia->cargar(true, !$interactive);
     //Si no es interactivo, crea siempre la BD
     //--- Vincula un usuario a todos los proyectos y se instala el proyecto
     $instancia->agregar_usuario('toba', 'Usuario Toba', $pwd);
     foreach ($instancia->get_lista_proyectos_vinculados() as $id_proyecto) {
         $proyecto = $instancia->get_proyecto($id_proyecto);
         $grupo_acceso = $proyecto->get_grupo_acceso_admin();
         $proyecto->vincular_usuario('toba', array($grupo_acceso));
     }
     //--- Crea el login y exporta el proyecto
     /*if (isset($nuevo_proyecto)) {
     			$nuevo_proyecto->actualizar_login();					//WTH??
     			$nuevo_proyecto->exportar();	
     		}*/
     $instancia->exportar_local();
     //--- Crea los nuevos alias
     $instancia->crear_alias_proyectos();
     //--- Ejecuta instalaciones particulares de cada proyecto
     foreach ($instancia->get_lista_proyectos_vinculados() as $id_proyecto) {
         $instancia->get_proyecto($id_proyecto)->instalar();
     }
     //--- Mensajes finales
     if ($interactive) {
         $this->consola->titulo("Configuraciones Finales");
         $toba_conf = toba_modelo_instalacion::dir_base() . "/toba.conf";
         if (toba_manejador_archivos::es_windows()) {
             $toba_conf = toba_manejador_archivos::path_a_unix($toba_conf);
             $this->consola->mensaje("1) Agregar al archivo '\\Apache2\\conf\\httpd.conf' la siguiente directiva: ");
             $this->consola->mensaje("");
             $this->consola->mensaje("     Include \"{$toba_conf}\"");
         } else {
             $this->consola->mensaje("1) Ejecutar el siguiente comando como superusuario: ");
             $this->consola->mensaje("");
             $this->consola->mensaje("     ln -s {$toba_conf} /etc/apache2/sites-enabled/{$nombre_toba}.conf");
         }
         $this->consola->mensaje("");
         $url = $instancia->get_proyecto('toba_editor')->get_url();
         $this->consola->mensaje("Reiniciar el servicio apache e ingresar al framework navegando hacia ");
         $this->consola->mensaje("");
         $this->consola->mensaje("     http://localhost{$url}");
         $this->consola->mensaje("");
         $this->consola->mensaje("");
     }
     $release = toba_modelo_instalacion::get_version_actual()->get_release();
     $instal_dir = toba_modelo_instalacion::dir_base();
     if (toba_manejador_archivos::es_windows()) {
         if (isset($_SERVER['USERPROFILE'])) {
             $path = $_SERVER['USERPROFILE'];
         } else {
             $path = $instal_dir;
         }
         $path .= "\\entorno_toba_{$release}.bat";
         $bat = "@echo off\n";
         $bat .= "set TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "set TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "set TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= "set PATH=%PATH%;%TOBA_DIR%/bin\n";
         $bat .= "echo Entorno cargado.\n";
         $bat .= "echo Ejecute 'toba' para ver la lista de comandos disponibles.\n";
         file_put_contents($path, $bat);
         if ($interactive) {
             $this->consola->mensaje("2) Se genero el siguiente .bat:");
             $this->consola->mensaje("");
             $this->consola->mensaje("   {$path}");
             $this->consola->mensaje("");
             $this->consola->mensaje("Para usar los comandos toba ejecute el .bat desde una sesión de consola (cmd.exe)");
         }
     } else {
         $path = $instal_dir;
         $path .= "/entorno_toba.env";
         $bat = "export TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "export TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "export TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= 'export PATH="$TOBA_DIR/bin:$PATH"' . "\n";
         $bat .= "echo \"Entorno cargado.\"\n";
         $bat .= "echo \"Ejecute 'toba' para ver la lista de comandos disponibles.\"\n";
         file_put_contents($path, $bat);
         chmod($path, 0755);
         if ($interactive) {
             $this->consola->mensaje("2) Se genero el siguiente archivo:");
             $this->consola->mensaje("");
             $this->consola->mensaje("   {$path}");
             $this->consola->mensaje("");
             $sh = basename($path);
             $this->consola->mensaje("Para usar los comandos toba ejecute antes el .env precedido por un punto y espacio");
         }
     }
     if ($interactive) {
         $this->consola->mensaje("");
         $this->consola->mensaje("3) Entre otras cosas puede crear un nuevo proyecto ejecutando el comando");
         $this->consola->mensaje("");
         $this->consola->mensaje("   toba proyecto crear");
     }
 }
Example #21
0
 protected static function get_archivos_incluidos()
 {
     $todos = get_included_files();
     $path_relativo = toba_manejador_archivos::path_a_unix(toba::proyecto()->get_path());
     $archivos = array();
     foreach ($todos as $archivo) {
         $archivo = toba_manejador_archivos::path_a_unix($archivo);
         if (strpos($archivo, $path_relativo) !== false) {
             $archivos[] = $archivo;
         }
     }
     return $archivos;
 }
Example #22
0
 protected function obtener_archivos($path, $excluidos = array())
 {
     $excluidos = $this->preparar_excluidos($path, $excluidos);
     $archivos = toba_manejador_archivos::get_archivos_directorio($path, '/.*\\.php$/', true, $excluidos);
     sort($archivos, SORT_STRING);
     return $archivos;
 }
Example #23
0
 /**
  * Genera el xml del componente
  * @param boolean $inicial Si el elemento es el primero llamado desde vista_xml
  * @param string $xmlns Namespace para el componente
  * @return string XML del componente
  */
 function vista_xml($inicial = false, $xmlns = null)
 {
     if ($xmlns) {
         $this->xml_set_ns($xmlns);
     }
     if (isset($this->_memoria['parametros'])) {
         $contenido = $this->_memoria['parametros']['contenido'];
         $formato = $this->_memoria['parametros']['formato'];
         $es_dirigido = $this->_memoria['parametros']['es_dirigido'];
         $archivo = self::generar_archivo($contenido, 'svg', $es_dirigido);
         $dir_temp = toba::instalacion()->get_path_temp();
         $xml = '<' . $this->xml_ns . 'img type ="svg"' . $this->xml_ns_url;
         if (isset($this->xml_caption)) {
             $xml .= ' caption="' . $this->xml_caption . '"';
         }
         $xml .= $this->xml_get_att_comunes();
         $xml .= ' src="' . toba_manejador_archivos::path_a_unix($dir_temp . "/" . $archivo) . '">';
         $xml .= $this->xml_get_elem_comunes();
         $svg = file_get_contents(toba_manejador_archivos::path_a_unix($dir_temp . "/" . $archivo));
         $svg = substr($svg, stripos($svg, '<svg'));
         $svg = substr($svg, 0, strripos($svg, '</svg>') + 6);
         $enc = mb_detect_encoding($svg);
         if (strtolower(substr($enc, 0, 8)) != 'iso-8859') {
             $svg = iconv($enc, 'iso-8859-1', $svg);
         }
         $xml .= $svg . '</' . $this->xml_ns . 'img>';
         return $xml;
     }
 }
Example #24
0
 /**
  * Devuelve la lista de las INSTANCIAS
  */
 static function get_lista($instalacion = null)
 {
     if (!isset($instalacion)) {
         $instalacion = toba_modelo_instalacion::dir_base();
     }
     $dirs = array();
     try {
         $temp = toba_manejador_archivos::get_subdirectorios($instalacion, '|^' . self::dir_prefijo . '|');
         foreach ($temp as $dir) {
             $temp_dir = explode(self::dir_prefijo, $dir);
             if (count($temp_dir) > 1) {
                 $dirs[] = $temp_dir[1];
             }
         }
     } catch (toba_error $e) {
         // No existe la instalacion
     }
     return $dirs;
 }
Example #25
0
 function proyecto__cambio_memoria_por_hilo()
 {
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion('/toba::hilo/', 'toba::memoria');
     $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '/.php$/', true);
     $editor->procesar_archivos($archivos);
 }
Example #26
0
 /**
  * Extrae los attachments PDFs de un documento. Requiere tener instalado en el path el ejecutable 'pdftk'. Si falla lanza una excepcion toba_error
  * @param string $archivo_pdf Path completo al archivo PDF de entrada que contiene attachments 
  * @param string $patron Patrón a extraer (formato preg_match), se asumen todas 
  * @return array Paths completo a archivos extraidos. Es responsabilidad del que llama borrar la carpeta contenedora posterior a su uso
  */
 static function pdf_get_attachments($archivo_pdf, $patron = null)
 {
     $carpeta_temp = toba::proyecto()->get_path_temp() . '/' . md5(uniqid(time()));
     if (!file_exists($carpeta_temp)) {
         if (!mkdir($carpeta_temp)) {
             throw new toba_error("No fue posible extraer los XML del pdf", "Error al intentar crear carpeta temporal {$carpeta_temp} . Verifique permisos");
         }
     }
     $stdout = null;
     $stderr = null;
     $comando = "pdftk {$archivo_pdf} unpack_files output {$carpeta_temp}";
     if (toba_manejador_archivos::ejecutar($comando, $stdout, $stderr) !== 0) {
         throw new toba_error("No fue posible extraer los XML del pdf", "Error al ejecutar comando '{$comando}': {$stdout}\n" . $stderr);
     }
     $archivos = toba_manejador_archivos::get_archivos_directorio($carpeta_temp, $patron);
     if (empty($archivos)) {
         toba_manejador_archivos::eliminar_directorio($carpeta_temp);
     }
     return $archivos;
 }
Example #27
0
 /**
  *	Retorna la definicion compilada de un componente
  */
 static function get_metadatos_compilados($id, $item = false)
 {
     //Chequea si no se redefinieron en runtime
     $extendidos = toba_cargador::instancia()->get_metadatos_redefinidos($id);
     if (isset($extendidos)) {
         return $extendidos;
     }
     if ($item) {
         $clase = 'toba_mc_item__' . toba_manejador_archivos::nombre_valido($id['componente']);
     } else {
         $clase = 'toba_mc_comp__' . $id['componente'];
     }
     return call_user_func(array($clase, 'get_metadatos'));
 }
 protected function get_path_tabla($path_inicial, $tabla)
 {
     $candidato = str_replace('%id%', $tabla, toba_personalizacion::template_archivo_tabla);
     $valido = toba_manejador_archivos::nombre_valido($candidato);
     return $path_inicial . $valido;
 }
Example #29
0
 protected function crear_directorios()
 {
     toba_manejador_archivos::crear_arbol_directorios($this->dir);
     toba_manejador_archivos::crear_arbol_directorios($this->dir_tablas);
     toba_manejador_archivos::crear_arbol_directorios($this->dir_componentes);
     toba_manejador_archivos::crear_arbol_directorios($this->dir_componentes . self::dir_nuevos);
     toba_manejador_archivos::crear_arbol_directorios($this->dir_componentes . self::dir_modificados);
     toba_manejador_archivos::crear_arbol_directorios($this->dir_componentes . self::dir_borrados);
 }
 /**
  * Ejecuta una instalacion completa del framework para desarrollar un nuevo proyecto
  * @consola_parametros Opcionales: [-d 'iddesarrollo'] [-t 0| 1] [-n 'nombre inst'] [-h 'ubicacion bd'] [-p 'puerto'] [-u 'usuario bd'] [-b nombre bd] [-c 'archivo clave bd'] [-k 'archivo clave usuario admin']  [--usuario-admin 'usuario admin']
  * @gtk_icono instalacion.png
  */
 function opcion__instalar()
 {
     $nombre_toba = 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release('_');
     $alias = '/' . 'toba_' . toba_modelo_instalacion::get_version_actual()->get_release();
     //--- Verificar instalacion
     $param = $this->get_parametros();
     //--- Borra la instalacion anterior??
     if (toba_modelo_instalacion::existe_info_basica()) {
         toba_modelo_instalacion::borrar_directorio();
     }
     //--- Crea la INSTALACION
     $id_desarrollo = $this->definir_id_grupo_desarrollo($param);
     $tipo_instalacion = $this->definir_tipo_instalacion_produccion($param);
     $nombre = $this->definir_nombre_instalacion($param);
     toba_modelo_instalacion::crear($id_desarrollo, $alias, $nombre, $tipo_instalacion);
     $id_instancia = $tipo_instalacion == '1' ? 'produccion' : $this->get_entorno_id_instancia(true);
     //--- Crea la definicion de bases
     $base = $nombre_toba;
     if (!$this->get_instalacion()->existe_base_datos_definida($base)) {
         $datos = array('motor' => 'postgres7', 'profile' => $this->definir_profile_motor($param), 'usuario' => $this->definir_usuario_motor($param), 'clave' => $this->definir_clave_motor($param), 'base' => $this->definir_base_motor($param), 'puerto' => $this->definir_puerto_motor($param), 'encoding' => 'LATIN1', 'schema' => $id_instancia);
         $this->get_instalacion()->agregar_db($base, $datos);
     }
     //--- Crea la instancia
     $proyectos = array();
     toba_modelo_instancia::crear_instancia($id_instancia, $base, $proyectos);
     //-- Carga la instancia
     $instancia = $this->get_instancia($id_instancia);
     $instancia->cargar(true);
     //Si no es interactivo, crea siempre la BD
     //--- Pido el password para el usuario por defecto
     $pwd = $this->definir_clave_usuario_admin($param);
     $usr = $this->definir_usuario_admin($param);
     //--- Vincula un usuario a todos los proyectos y se instala el proyecto
     $instancia->agregar_usuario($usr, 'Usuario Administrador', $pwd);
     $instancia->exportar_local();
     //--- Crea los nuevos alias
     $instancia->crear_alias_proyectos();
     $release = toba_modelo_instalacion::get_version_actual()->get_release();
     $instal_dir = toba_modelo_instalacion::dir_base();
     if (toba_manejador_archivos::es_windows()) {
         if (isset($_SERVER['USERPROFILE'])) {
             $path = $_SERVER['USERPROFILE'];
         } else {
             $path = $instal_dir;
         }
         $path .= "\\entorno_toba_{$release}.bat";
         $bat = "@echo off\n";
         $bat .= "set TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "set TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "set TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= "set PATH=%PATH%;%TOBA_DIR%/bin\n";
         $bat .= "echo Entorno cargado.\n";
         $bat .= "echo Ejecute 'toba' para ver la lista de comandos disponibles.\n";
         file_put_contents($path, $bat);
     } else {
         $path = $instal_dir;
         $path .= "/entorno_toba.env";
         $bat = "export TOBA_DIR=" . toba_dir() . "\n";
         $bat .= "export TOBA_INSTANCIA={$id_instancia}\n";
         $bat .= "export TOBA_INSTALACION_DIR={$instal_dir}\n";
         $bat .= 'export PATH="$TOBA_DIR/bin:$PATH"' . "\n";
         $bat .= "echo \"Entorno cargado.\"\n";
         $bat .= "echo \"Ejecute 'toba' para ver la lista de comandos disponibles.\"\n";
         file_put_contents($path, $bat);
         chmod($path, 0755);
     }
 }