예제 #1
0
 /**
  * Cambia los extends de las clases que extienden de las componentes de $de
  * a extends de las componentes de $a.
  * Combinaciones válidas:
  *	$de = toba		| $a = proyecto
  *	$de = toba		| $a = personalizacion
  *	$de = proyecto	| $a = personalizacion
  * @param toba_modelo_proyecto $proyecto
  * @param string $de valores posibles: toba | proyecto
  * @param string $a valores posibles: proyecto | personalizacion
  */
 static function revincular_componentes(toba_modelo_proyecto $proyecto, $de = 'toba', $a = 'proyecto')
 {
     if (!self::chequear_combinaciones($de, $a)) {
         throw new toba_error("No se puede revincular de {$de} a {$a}");
     }
     if ($de == 'toba' && $a == 'personalizacion') {
         self::revincular_componentes($proyecto, $de, 'proyecto');
         self::revincular_componentes($proyecto, 'proyecto', $a);
         return;
     }
     $id_proyecto = $proyecto->get_id();
     $clases_de = array();
     $clases_a = array();
     self::get_clases($proyecto, $de, $a, $clases_de, $clases_a);
     $editor = new toba_editor_archivos();
     foreach ($clases_de as $key => $clase) {
         $clase_nueva = $clases_a[$key];
         $texto_buscado = "|(?:[\t\r\n ]+extends[\t\r\n ]+{$clase})|i";
         $texto_reemplazo = " extends {$clase_nueva}";
         $editor->agregar_sustitucion($texto_buscado, $texto_reemplazo);
     }
     $path = $proyecto->get_dir() . '/php';
     $dirs_excluidos = array($path . '/extension_toba/componentes');
     $archivos = toba_manejador_archivos::get_archivos_directorio($path, '|.php|', true, $dirs_excluidos);
     $editor->procesar_archivos($archivos);
 }
예제 #2
0
 function proyecto__agregar_config_rest()
 {
     $proyecto = $this->elemento->get_id();
     $dir_proyecto = $this->elemento->get_dir();
     $destino = $dir_proyecto . '/www/rest.php';
     copy(toba_dir() . '/php/modelo/template_proyecto/www/rest.php', $destino);
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion('|__proyecto__|', $proyecto);
     $editor->procesar_archivo($destino);
 }
예제 #3
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);
 }
예제 #4
0
 /**
  *	Crea un proyecto NUEVO
  */
 static function crear(toba_modelo_instancia $instancia, $nombre, $usuarios_a_vincular)
 {
     //- 1 - Controles
     $dir_template = toba_dir() . self::template_proyecto;
     if ($nombre == 'toba') {
         throw new toba_error("INSTALACION: No es posible crear un proyecto con el nombre 'toba'");
     }
     if (self::existe($nombre)) {
         throw new toba_error("INSTALACION: Ya existe una carpeta con el nombre '{$nombre}' en la carpeta 'proyectos'");
     }
     try {
         //- 2 - Modificaciones en el sistema de archivos
         $dir_proyecto = $instancia->get_path_proyecto($nombre);
         $url_proyecto = $instancia->get_url_proyecto($nombre);
         // Creo la CARPETA del PROYECTO
         $excepciones = array();
         $excepciones[] = $dir_template . '/www/aplicacion.produccion.php';
         toba_manejador_archivos::copiar_directorio($dir_template, $dir_proyecto, $excepciones);
         // Modifico los archivos
         $editor = new toba_editor_archivos();
         $editor->agregar_sustitucion('|__proyecto__|', $nombre);
         $editor->agregar_sustitucion('|__instancia__|', $instancia->get_id());
         $editor->agregar_sustitucion('|__toba_dir__|', toba_manejador_archivos::path_a_unix(toba_dir()));
         $editor->agregar_sustitucion('|__version__|', '1.0.0');
         $editor->procesar_archivo($dir_proyecto . '/www/aplicacion.php');
         $modelo = $dir_proyecto . '/php/extension_toba/modelo.php';
         $comando = $dir_proyecto . '/php/extension_toba/comando.php';
         $editor->procesar_archivo($comando);
         $editor->procesar_archivo($modelo);
         $editor->procesar_archivo($dir_proyecto . '/www/rest.php');
         $editor->procesar_archivo($dir_proyecto . '/www/servicios.php');
         rename($modelo, str_replace('modelo.php', $nombre . '_modelo.php', $modelo));
         rename($comando, str_replace('comando.php', $nombre . '_comando.php', $comando));
         $ini = $dir_proyecto . '/proyecto.ini';
         $editor->procesar_archivo($ini);
         // Asocio el proyecto a la instancia
         $instancia->vincular_proyecto($nombre, null, $url_proyecto);
         //- 3 - Modificaciones en la BASE de datos
         $db = $instancia->get_db();
         try {
             $db->abrir_transaccion();
             $db->retrazar_constraints();
             $db->ejecutar(self::get_sql_metadatos_basicos($nombre));
             $sql_version = self::get_sql_actualizar_version(toba_modelo_instalacion::get_version_actual(), $nombre);
             $db->ejecutar($sql_version);
             foreach ($usuarios_a_vincular as $usuario) {
                 self::do_vincular_usuario($db, $nombre, $usuario, array('admin'));
             }
             $db->cerrar_transaccion();
         } catch (toba_error $e) {
             $db->abortar_transaccion();
             $txt = 'PROYECTO : Ha ocurrido un error durante la carga de METADATOS del PROYECTO. DETALLE: ' . $e->getMessage();
             throw new toba_error($txt);
         }
     } catch (toba_error $e) {
         // Borro la carpeta creada
         if (is_dir($dir_proyecto)) {
             $instancia->desvincular_proyecto($nombre);
             toba_manejador_archivos::eliminar_directorio($dir_proyecto);
         }
         throw $e;
     }
 }
예제 #5
0
 static function crear_archivo_apache($alias_nucleo)
 {
     $archivo = self::get_archivo_alias_apache();
     copy(toba_dir() . '/php/modelo/var/toba.conf', $archivo);
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion('|__toba_dir__|', toba_manejador_archivos::path_a_unix(toba_dir()));
     $editor->agregar_sustitucion('|__toba_alias__|', $alias_nucleo);
     $editor->agregar_sustitucion('|__instalacion_dir__|', toba_manejador_archivos::path_a_unix(self::dir_base()));
     $editor->procesar_archivo($archivo);
 }
예제 #6
0
 /**
  * Se deja de lado el archivo PROYECTO y VERSION y se incluyen en el archivo proyecto.ini en la raiz junto a otras configuraciones del instalador
  */
 function proyecto__configuraciones_ini()
 {
     $origen_ini = toba_dir() . '/php/modelo/template_proyecto/proyecto.ini';
     $destino_ini = $this->elemento->get_dir() . '/proyecto.ini';
     $archivo_proyecto = $this->elemento->get_dir() . '/PROYECTO';
     $archivo_version = $this->elemento->get_dir() . '/VERSION';
     $version = '1.0.0';
     if (file_exists($archivo_proyecto)) {
         unlink($archivo_proyecto);
     }
     if (file_exists($archivo_version)) {
         $version = trim(file_get_contents($archivo_version));
         unlink($archivo_version);
     }
     if (!file_exists($destino_ini)) {
         if (!copy($origen_ini, $destino_ini)) {
             throw new toba_error("Imposible copiar de {$origen_ini} a {$destino_ini}");
         }
         $editor = new toba_editor_archivos();
         $editor->agregar_sustitucion('|__proyecto__|', $this->elemento->get_id());
         $editor->agregar_sustitucion('|__version__|', $version);
         $editor->procesar_archivos(array($destino_ini));
     }
 }
예제 #7
0
 function instancia__migracion_variables_entorno()
 {
     //Busco los archivos ya sean PHP o de lotes
     $dir_base = toba_dir() . '/bin';
     $archivos_php = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.php|', true);
     $archivos_sh = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.sh|', true);
     $archivos_bat = toba_manejador_archivos::get_archivos_directorio($dir_base, '|.bat|', true);
     //Proceso los cambios de asignacion de variables
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion('|\\stoba_instancia\\s*=|', ' TOBA_INSTANCIA=');
     $editor->agregar_sustitucion('|\\stoba_proyecto\\s*=|', ' TOBA_PROYECTO=');
     $editor->agregar_sustitucion('|\\stoba_dir\\s*=|', ' TOBA_DIR=');
     $editor->agregar_sustitucion('|\\$toba_dir|', '$TOBA_DIR');
     $editor->procesar_archivos($archivos_php);
     $editor->procesar_archivos($archivos_sh);
     $editor->procesar_archivos($archivos_bat);
     //Proceso las lecturas de variables en $_SERVER
     $editor2 = new toba_editor_archivos();
     $editor2->agregar_sustitucion('|$_SERVER[\'toba_proyecto\']|', '$_SERVER[\'TOBA_PROYECTO\']');
     $editor2->agregar_sustitucion('|$_SERVER[\'toba_instancia\']|', '$_SERVER[\'TOBA_INSTANCIA\']');
     $editor2->procesar_archivos($archivos_php);
 }
예제 #8
0
 function proyecto__namespace_toba()
 {
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion('/separar_texto_lineas\\(/', 'toba_texto::separar_texto_lineas(');
     $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '/.php$/', true);
     $editor->procesar_archivos($archivos);
 }
예제 #9
0
 /**
  * El ei_filtro pasa a ser un formulario con un par de campos seteados
  */
 function proyecto__migrar_filtro_viejo()
 {
     //-- Todos los actuales filtros, se les pone un par de flags en el form.
     $sql = "\n\t\t\tUPDATE apex_objeto_ut_formulario SET no_imprimir_efs_sin_estado = 1, resaltar_efs_con_estado = 1\n\t\t\tFROM  apex_objeto\n\t\t\tWHERE \n\t\t\t\t\tapex_objeto_ut_formulario.objeto_ut_formulario\t\t\t= apex_objeto.objeto\n\t\t\t\tAND apex_objeto_ut_formulario.objeto_ut_formulario_proyecto = apex_objeto.proyecto\n\t\t\t\tAND apex_objeto.clase='toba_ei_filtro' \n\t\t\t\tAND apex_objeto_ut_formulario.objeto_ut_formulario_proyecto = '{$this->elemento->get_id()}'\n\t\t";
     $cant = $this->elemento->get_db()->ejecutar($sql);
     //-- Se cambia la clase
     $sql = "UPDATE apex_objeto SET clase='toba_ei_formulario' WHERE clase='toba_ei_filtro' AND proyecto = '{$this->elemento->get_id()}'";
     $cant += $this->elemento->get_db()->ejecutar($sql);
     //-- Se cambian las extensiones de código y los hint de tipos
     $editor = new toba_editor_archivos();
     $editor->agregar_sustitucion("|toba_ei_filtro|", "toba_ei_formulario");
     $archivos = toba_manejador_archivos::get_archivos_directorio($this->elemento->get_dir(), '|.php|', true);
     $editor->procesar_archivos($archivos);
     return $cant;
 }