/** * 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); }
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); }
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); }
/** * 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; } }
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); }
/** * 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)); } }
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); }
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); }
/** * 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; }