Viewing file:      ci_editor.php (5.95 KB)      -rwxrwxr-x Select action/file-type:    (+) |   (+) |   (+) | Code (+) | Session (+) |   (+) | SDB (+) |   (+) |   (+) |   (+) |   (+) |   (+) |
 
<?php 
 class ci_editor extends toba_ci
 {
     protected $s__proyecto;
     protected $s__dimension;
     protected $s__elementos = array();
     protected $datos_dimension;
     
     function datos()
     {
         return $this->controlador()->dep('datos');    
     }
     
     function set_proyecto($proyecto)
     {
         $this->s__proyecto = $proyecto;
     }
     
     //-----------------------------------------------------------------------------------
     //---- Pantalla 1 -----------------------------------------------------------------
     //-----------------------------------------------------------------------------------
 
     //---- perfil -----------------------------------------------------------------------
 
     function evt__perfil__modificacion($datos)
     {
         $datos['proyecto'] = $this->s__proyecto;
         $this->datos()->tabla('perfil')->set($datos);
     }
 
     function conf__perfil(toba_ei_formulario $form)
     {
         $datos = $this->datos()->tabla('perfil')->get();
         $form->set_datos($datos);
     }
     
     //---- dimensiones ------------------------------------------------------------------
 
     function evt__dimensiones__seleccion($seleccion)
     {
         $this->s__dimension = $seleccion['dimension'];
         $this->set_pantalla('pant_dimensiones');
     }
 
     function conf__dimensiones(toba_ei_cuadro $cuadro)
     {
         $datos = toba_info_editores::get_dimensiones($this->s__proyecto);
         foreach (array_keys($datos) as $id ) {
             $elementos = $this->datos()->tabla('dims')->get_id_fila_condicion(array('dimension'=> $datos[$id]['dimension']));
             switch (count($elementos)) {
                 case 0:
                     $txt = 'No hay restricciones.';
                     break;
                 case 1:
                     $txt = '1 elemento seleccionado.';
                     break;
                 default:
                     $txt = count($elementos) . ' elementos seleccionados.';
             }
             $datos[$id]['estado'] = $txt;
         }
         $cuadro->set_datos($datos);
     }
 
     //-----------------------------------------------------------------------------------
     //---- Pantalla 2 -----------------------------------------------------------------
     //-----------------------------------------------------------------------------------
 
     function evt__aceptar()
     {
         $this->set_pantalla('pant_perfil');
     }
 
     function evt__volver()
     {
         $this->set_pantalla('pant_perfil');
     }
 
     function conf__pant_dimensiones($pantalla)
     {
         $this->datos_dimension = toba_info_editores::get_datos_dimension($this->s__proyecto, $this->s__dimension);
         //Saco los botones del CI de afuera
         $pantalla_externa = $this->controlador->pantalla();
         $pantalla_externa->eliminar_evento('guardar');
         $pantalla_externa->eliminar_evento('cancelar');
         $pantalla_externa->eliminar_evento('eliminar');
         $perfil = $this->datos()->tabla('perfil')->get();
         $txt = "Perfil de datos: <strong>{$perfil['nombre']}</strong>.<br>";
         $txt .= "Dimensión: <strong>{$this->datos_dimension['nombre']}</strong>.<br>";
         $txt .= 'Seleccione los elementos que desea habilitar para el perfil.';
         $this->pantalla()->set_descripcion($txt);
     }
 
     //---- FORM elementos --------------------------------------------------------------------
 
     function conf__elementos(toba_ei_formulario_ml $form_ml)
     {
         //Lista completa de elementos de la dimension
         $datos = $this->get_elementos_dimension();
         //Tomo los elementos de la dimension seleccionada
         $datos_habilitados = $this->datos()->tabla('dims')->get_filas(array('dimension'=>$this->s__dimension));
         //Los guardo para comparar
         $this->s__elementos = array();
         //ei_arbol($datos_habilitados,'contenido Dt');
         foreach ($datos_habilitados as $elemento) {
             $this->s__elementos[$elemento['clave']] = $elemento[apex_datos_clave_fila];
         }
         foreach (array_keys($datos) as $id) {
             if (isset($this->s__elementos[$datos[$id]['clave']])) {
                 $datos[$id]['habilitar'] = 1;
             } else {
                 $datos[$id]['habilitar'] = 0;
             }
         }
         $form_ml->set_datos($datos);
     }
 
     function evt__elementos__modificacion($datos)
     {
         foreach (array_keys($datos) as $id) {
             if (trim($datos[$id]['clave']) == '') {                        //Atrapa el caso de una clave vacia.
                     continue;                
             }
             if (isset($this->s__elementos[$datos[$id]['clave']])) {
                 if (!($datos[$id]['habilitar'] == 1)) {
                     $this->datos()->tabla('dims')->eliminar_fila($this->s__elementos[$datos[$id]['clave']]);
                 }
             } else {
                 if (($datos[$id]['habilitar'] == 1)) {
                     $datos[$id]['dimension'] = $this->s__dimension;
                     $this->datos()->tabla('dims')->nueva_fila($datos[$id]);
                 }
             }
         }
     }
 
     //---- Buscar data de la dimension --------------------------------------------------------------------
     
     function get_elementos_dimension()
     {
         $id = explode(',', $this->datos_dimension['col_id']);
         $desc = explode(',', $this->datos_dimension['col_desc']);
         $sql = 'SELECT ' . implode(" || '".toba_perfil_datos::separador_multicol_db."' || ", $id) . ' as clave, ' 
                         . implode("  || ' - ' ||  ", $desc) . " as descripcion
                 FROM {$this->datos_dimension['tabla']}
                 ORDER BY descripcion";
         toba::logger()->debug($sql);
         $datos = $this->get_db($this->datos_dimension['fuente_datos'])->consultar($sql);
         return $datos;
     }
 
     function get_db($id)
     {        
         $fuente_datos = $this->get_fuente_proyecto_alterno($id, $this->s__proyecto);
         return  $fuente_datos->get_db();        
     }
     
     function get_fuente_proyecto_alterno($id, $proyecto)
     {
         $parametros = toba_proyecto_db::get_info_fuente_datos($proyecto, $id);
         if (isset($parametros['subclase_archivo'])) {
             if (toba::proyecto()->get_id() != $proyecto) {
                 //Si la fuente esta extendida, puede necesitar otros archivos del proyecto, agregar el include path                
                 $path_proyecto = toba::instancia()->get_path_proyecto($proyecto) . '/php';
                 agregar_dir_include_path($path_proyecto);
             }                
             $archivo = $parametros['subclase_archivo'];
         } else {
             $archivo = 'nucleo/lib/toba_fuente_datos.php';
         }
         if (isset($parametros['subclase_nombre'])) {
             $clase = $parametros['subclase_nombre'];
         } else {
             $clase = "toba_fuente_datos";
         }
         require_once($archivo);
         return new $clase($parametros);        
     }
 }
 ?>
  |