protected function ejecutar_opcion($opcion, $argumentos) { if (method_exists($this, $opcion)) { $this->{$opcion}($argumentos); } else { $this->consola->mensaje("La opcion '" . $this->argumentos[0] . "' no existe"); $this->mostrar_ayuda(); } }
/** * Importa una personalizacion, tiene 2 modos de accion: * Transaccion Global, se importa todo o nada. * Transaccion a nivel de componente, se importa solo lo que no da error. */ function aplicar() { if (!$this->existe()) { throw new toba_error("PERSONALIZACION: No existe la carpeta de personalización"); } //Instancio ambos importadores $importador_tablas = new toba_importador_tablas($this->dir_tablas . self::nombre_plan, $this->db); $importador_componentes = new toba_importador_componentes($this->dir_componentes . self::nombre_plan, $this->db); //Empiezo haciendo el chequeo de conflictos para los componentes //En una transaccion destinada a abortar //------------------------------------------------------------------------------------------// $this->db->abrir_transaccion(); $this->analizar_conflictos($importador_tablas, false); $this->analizar_conflictos($importador_componentes, false); $this->db->abortar_transaccion(); //------------------------------------------------------------------------------------------// //Comienzo la importacion propiamente dicha if ($this->ejecutar_en_transaccion_global()) { $this->db->abrir_transaccion(); $this->db->retrazar_constraints(); //Retraso los triggers para evitar problemas de fk } //Aplico la personalizacion a tablas y componentes try { $this->aplicar_cambios($importador_tablas); $this->aplicar_cambios($importador_componentes); } catch (toba_error_db $e) { $this->db->abortar_transaccion(); //Hubo problemas de SQL, aborto todo if ($this->consola) { $this->consola->mensaje("Ocurrio un error en la importacion \n"); } } catch (toba_error_usuario $e) { $this->db->abortar_transaccion(); //El usuario decidio no continuar, saco mensaje por pantalla if ($this->consola) { $this->consola->mensaje($e->getMessage()); } } if ($this->db->transaccion_abierta() && $this->ejecutar_en_transaccion_global()) { $this->db->cerrar_transaccion(); //Cierro la transaccion si aun esta abierta. Esto es, se ejecuto sin problemas } }
protected function io_conflicto_irresoluble(consola $consola, toba_registro_conflicto $conflicto) { $consola->mensaje("Se encontro un error irrecuperable, se abortará la importación de esta tarea. El error fue: {$conflicto->get_descripcion()}."); }