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