*
  • camposDependientes: Acción privada de Igep que sirve para recalcular las listas dependientes con el nuevo valor seleccionado. Nunca tiene que ser utilizado por los programadores.
  • *
  • abrirVentanaSeleccion: Acción privada de Igep que sirve para abrir una ventana de Selección. Nunca tiene que ser utilizado por los programadores.
  • *
  • buscarVentanaSeleccion: Acción privada de Igep que sirve para buscar en una ventana de Selección. Nunca tiene que ser utilizado por los programadores.
  • *
  • ordenarTabla: Acción privada de Igep que ordena los registros de una tabla por un campo y en un sentido.
  • * * * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License v.2 * @version $Id: IgepAccionesGenericas.php,v 1.74 2018-08-11 13:21:53 belenguer_jor Exp $ * @author David Pascual * @author Vero Navarro * @author Toni Felix * @author Jorge Belenguer * * @package gvHidra */ class IgepAccionesGenericas extends Action { /** * Variable de error. * * @var IgepError */ var $obj_errorNegocio; /** * La instancia de IgepComunicación para comunicarnos con la presentación. * @var IgepComunicacion */ var $comunica; /** * Variable que contendrá el posible mensaje a enviar al panel. Tiene que ser de la clase IgepMensaje. * @var IgepMensaje */ var $obj_mensaje; /** * Objeto que permite manejar/registrar el javascript de esta clase. * @var IgepSmarty */ var $obj_IgSmarty; private $_modal = false; private $_closeModal = false; /** * Constructor. Generará a partir de los parámetros que se le pasen una conexión a al base de datos y un * array de manejadores de tablas (una por cada una de las que mantenga el panel hijo). */ public function __construct() { /** @global IgepError */ global $g_error; if( !isset($g_error) ) { $g_error = new IgepError(); } $this->obj_errorNegocio = & $g_error; $this->setModal( false ); } //Fin del constructor /** * Método que se ejecuta tras el constructor y que permite seleccionar la acción a realizar. * En esta clase se encuentran las siguientes acciones genéricas: *
      *
    • camposDependientes : Recalcula listas dependientes y dispara acciones de interfaz.
    • *
    • abrirVentanaSeleccion : Abre la ventana de Selección.
    • *
    • buscarVentanaSeleccion : Realiza la busqueda en la ventana de Selección.
    • *
    * * @param ActionMapping $actionMapping * @param object $actionForm */ public function perform( $actionMapping, $actionForm ) { //Recogemos la accion y le quitamos el prefijo que nos viene de la ventana $str_accion = $actionForm->get( 'action' ); //Debug:Indicamos que entramos en Negocio y la accion a ejecutar IgepDebug::setDebug( DEBUG_IGEP, __CLASS__ . ": ejecutamos acción {$str_accion}" ); //creamos la instancia de IgepComunicacion $this->comunica = new IgepComunicacion( array() ); switch( $str_accion ) { case 'gvHautocomplete' : //Recogemos los valores $field = $_GET['field']; $value = $_GET['term']; $claseManejadora = $_GET['claseManejadora']; $objClase = IgepSession::damePanel( $claseManejadora ); $objClase->regenerarInstancia(); $resultado = null; //Primero delegamos en el programador $resultado = $objClase->setAutocomplete( $field, $value ); //Si no tiene programado nada, miramos si tiene matching if( is_null($resultado) ) { if( isset($objClase->matching[$field]) ) { $campoBD = $objClase->matching[$field]['campo']; $tablaBD = $objClase->matching[$field]['tabla']; $query = 'SELECT '.$campoBD.' as "autocomplete" FROM '.$tablaBD.' WHERE upper('.$campoBD.") like '%".strtoupper($value)."%' ORDER BY 1"; $res = $objClase->consultar( $query ); $resultado = array(); if( $res!=-1 and is_array($res) ) { foreach( $res as $row ) { $resultado[] = $row['autocomplete']; } } } } $objClase->limpiarInstancia(); $json = json_encode( $resultado ); print $json; die; break; //Acción Genérica de Igep que lanzan automáticamente los plug-ins cuando se actualiza un campo que tiene otros campos dependientes. Tipicamente las listas. case 'gvhJSRefreshUI': $this->listasDependientesJs = ''; $this->accionesInterfazJs = ''; $this->comunica->buildDataRefreshUI( $actionForm ); $resultado = $this->calcularCamposDependientes(); $jsLoadScript = $this->listasDependientesJs; $jsLoadScript .= $this->accionesInterfazJs; ob_clean(); $params = array ( 'path' => '' , 'context' => array( 'targetType' => 'self' , 'action' => 'NoAction' , 'script' => "{$jsLoadScript}" ) ); $response = json_encode( $params, JSON_FORCE_OBJECT ); print( $response );die; /* ob_clean(); header( "Cache-Control: no-store, no-cache, must-revalidate, max-age=0" ); header( "Cache-Control: post-check=0, pre-check=0", false ); header( "Pragma: no-cache" ); //$actionForward = $objDatos->getForward( 'IgepOperacionJS' ); echo $this->listasDependientesJs; echo $this->accionesInterfazJs; ob_flush(); die; */ break; case 'gvHchangeLanguage': //Cambiamos el idioma $conf = ConfigFramework::getConfig(); $lang = $_REQUEST['lang']; $lang = str_replace( "'" , "''", $lang ); $conf->setLanguage( $lang ); //Se debe cargar de nuvo el AppMainWindow $principal = new AppMainWindow(); IgepSession::_guardaPanelIgep( 'principal', $principal ); //$actionForward = $actionMapping->get( 'gvHidraSuccess' ); ob_clean(); $params = array ( 'path' => '' , 'context' => array( 'targetType' => 'self' , 'action' => 'reload' ) ); $response = json_encode( $params, JSON_FORCE_OBJECT ); print( $response ); die; break; //Acción Genérica de Igep que se lanza al pulsar al botón que lanza la ventana de selección (el botón de los 3 puntos). case 'abrirVentanaSeleccion': $this->comunica->construirArrayAbrirVentanaSeleccion( $actionForm ); $actionForward = $this->abrirVentanaSeleccion( $actionMapping ); break; //Acción Genérica de Igep que se lanza al pulsar al botón de búsqueda en la ventana de selección (la lupa). case 'buscarVentanaSeleccion': $this->comunica->construirArrayBuscarVentanaSeleccion( $actionForm ); $this->buscarVentanaSeleccion(); $actionForward = $actionMapping->get( 'IgepVentanaSeleccion' ); break; case 'ordenarTabla': $this->comunica->construirArrayOrdenarTabla( $actionForm ); $datosOrdenacion = $this->comunica->dameDatos( 'ordenarTabla' ); $idVentana = $datosOrdenacion['idVentana']; $columna = $datosOrdenacion['columna']; $orden = (empty($datosOrdenacion['orden']) ? 'desc' : $datosOrdenacion['orden']); $nombreClaseManejadora = $datosOrdenacion['claseManejadora']; $objClase = IgepSession::damePanel( $nombreClaseManejadora ); $objClase->regenerarInstancia(); //Guardamos el modo de ordenación $objClase->v_ordenCamposPanel = array(); if( !empty ($columna)) { $objClase->v_ordenCamposPanel[$columna] = $orden; } //Recuperamos el tipo de la columna de ordenación $tipo = $objClase->v_descCamposPanel[$columna]['tipo']; //Recogemos los datos a ordenar $cursor = $objClase->getResultForSearch(); $this->ordenarCursor( $cursor, $columna, $tipo, $orden ); $objClase->setResultForSearch( $cursor ); $objClase->limpiarInstancia(); ob_clean(); header( "Cache-Control: no-store, no-cache, must-revalidate, max-age=0" ); header( "Cache-Control: post-check=0, pre-check=0", false ); header( "Pragma: no-cache" ); if ( !empty($idVentana)) { $params = array ( 'path' => '', 'context' => array( 'targetType' => 'JDialog' , 'action' => 'gvHidraOpenJDialog' , 'claseM' => $nombreClaseManejadora , 'idVentana' => $idVentana , 'script' => $jsLoadScript , ) ); } else { $params = array ( 'path' => '' , 'context' => array( 'targetType' => 'self' , 'action' => 'reload' ) , ); } $response = json_encode( $params, JSON_FORCE_OBJECT ); echo $response; ob_flush(); die; break; case 'IgepSaltoVentana': case 'IgepRegresoVentana': $nombreClase = $_REQUEST['claseManejadora']; $nomForm = $_REQUEST['formActua']; $idBtnCompleto = $_REQUEST['idBtn']; $gvhpanel = $_REQUEST['gvhpanel']; $idVentana = $_REQUEST['idVentana']; $objClase = IgepSession::damePanel( $nombreClase ); $objClase->regenerarInstancia(); //Creamos el objDatos $objClase->comunica = new IgepComunicacion( $objClase->v_descCamposPanel ); $objClase->comunica->data2Arrays(); $objClase->comunica->setPanel( $gvhpanel ); //Comprobamos si el salto está sobre ventana modal, en cuyo caso marcamos la clase como modal. if( $objClase->isModal() ) { $this->setModal(true); } $comunicaUsuario = new IgepComunicaUsuario( $objClase->comunica, $objClase->v_preInsercionDatos, $objClase->v_listas ); //Validamos los campos antes de saltar $checkForm = $objClase->comunica->getCheckForm(); if( $checkForm != 0 ) { $validacionIgep = $objClase->comunica->checkDataTypes(); if( $validacionIgep != '0' ) { $objClase->showMessage( 'IGEP-17', array($validacionIgep) ); $actionForward = new ActionForward( 'gvHidraNoAction' ); $actionForward->put( 'IGEPclaseManejadora', $nombreClase ); return $actionForward; } } //Obtenemos el objSalto if( $str_accion == 'IgepSaltoVentana' ) { $salto = new IgepSalto( $nombreClase, $_REQUEST['idBotonSalto'] ); $salto->setBtnId( $idBtnCompleto ); $salto->setNameSourcePanel( $gvhpanel ); $resultadoSalto = $objClase->saltoDeVentana( $comunicaUsuario, $salto ); } else { $salto = IgepSession::dameSalto(); $salto->setId( $_REQUEST['idBotonSalto'] ); $resultadoSalto = $objClase->regresoAVentana( $comunicaUsuario, $salto ); } if (!empty ($idVentana) && !$salto->isModal()) { $salto->setIdModal ($idVentana); } if( $resultadoSalto==0 ) { //Guardamos datos del salto IgepSession::guardaSalto( $salto ); $actionForward = $actionMapping->get('IgepSaltoVentana'); //Si es una vuelta borramos el panel origen if( $str_accion == 'IgepRegresoVentana') { if( $salto->isModal() ) { $this->obj_IgSmarty = new IgepSmarty(); //$salto->js = IgepSmarty::getJsCloseModalWindow(); //$this->obj_IgSmarty->addPreScript( $salto->js ); $this->setCloseModalWindow( true ); IgepSession::guardaVariable( IgepSession::GVHIDRA_JUMP,'obj_jsOculto', $this->obj_IgSmarty ); $actionForward = $actionMapping->get( 'gvHidraCloseJDialog' ); $returnPath = ''; $width = ''; $height = ''; if( is_object($salto )) { $returnPath = $salto->getDestinoVuelta(); $claseManejadoraRetorno = $salto->getNameSourceClass(); $actionForward->put( 'IGEPclaseManejadora', $salto->getClaseDestino() ); $panelRetorno = $salto->getNameSourcePanel(); $actionForward->put( 'IGEPpanelRetorno', $panelRetorno ); $idModal = $salto->getIdModal(); $actionForward->put( 'IGEPmodalID', $idModal ); $returnPath.= '&claseManejadora='.$claseManejadoraRetorno.'&gvhpanel='.$panelRetorno; $actionForward->put( 'IGEPSaltoDestinoVuelta', $returnPath ); } } else { $idModal = $salto->getIdModal(); if (!empty ($idModal)) { $actionForward->put( 'IGEPmodalID', $idModal ); } IgepSession::borraPanel( $nombreClase ); $actionForward->put( 'IGEPaccionDestinoSalto', $salto->getDestinoVuelta() ); } } else { /************ MODAL *********************/ //Comprobamos si es un salto modal o no //Es un salto if( $salto->isModal() ) { //Si es modal $salto->setForm( $nomForm ); $actionForwardSalto = new ActionForward( 'saltoModal' ); $actionForwardSalto->setPath( $salto->getDestinoIda() ); //$path = $actionForwardSalto->getPath(); //Si viene de un salto almacenamos los datos para la accion de retorno $actionForward = $actionMapping->get( 'IgepSaltoVentanaModal' ); $actionForward->put( 'IGEPaccionDestinoSalto', $salto->getDestinoIda() ); $actionForward->put( 'IGEPclaseManejadora', $salto->getClaseDestino() ); $actionForward->put( 'IGEPaccionDestinoVueltaSalto', $salto->getDestinoVuelta() ); $returnPath = ''; $width = ''; $height = ''; if( is_object($salto) ) { $idModal = $salto->getIdModal(); $actionForward->put( 'IGEPmodalID', $idModal ); $width = $salto->getWidthModal(); $height = $salto->getHeightModal(); $actionForward->put( 'IGEPmodalWidth', $width ); $actionForward->put( 'IGEPmodalHeight', $height ); } } else { $idModal = $salto->getIdModal(); if (!empty ($idModal)) { $actionForward->put( 'IGEPmodalID', $idModal ); } $actionForward->put( 'IGEPaccionDestinoSalto', $salto->getDestinoIda() ); } /************ MODAL *********************/ } } else { if( is_object($resultadoSalto) ) { $actionForward = $resultadoSalto; } else { $actionForward = new ActionForward( 'gvHidraNoAction' ); $actionForward->put( 'IGEPclaseManejadora', $nombreClase ); } } break; case 'cambiarPanelDetalle': $nombreClaseMaestro = $_REQUEST['claseManejadoraPadre']; $nombreClaseDetalle = $_REQUEST['claseManejadora']; $panel = (array_key_exists ('gvhpanel', $_REQUEST) ? $_REQUEST['gvhpanel'] : null); $idVentana = (array_key_exists ('idVentana', $_REQUEST) ? $_REQUEST['idVentana'] : null); $objClaseMaestro = IgepSession::damePanel( $nombreClaseMaestro ); $objClaseMaestro->regenerarInstancia(); $objClaseMaestro->panelDetalleActivo = $nombreClaseDetalle; IgepSession::borraVariable( $nombreClaseDetalle, 'obj_ultimaConsulta' ); if ($panel == 'edi' && isset ($objClaseMaestro->obj_ultimaEdicion)){ $m_datos = $objClaseMaestro->getResultForEdit(); } else { $m_datos = $objClaseMaestro->getResultForSearch(); } $tupla = array( $m_datos[$objClaseMaestro->int_filaActual] ); $res = $objClaseMaestro->buildQueryDetails( $tupla ); $objClaseMaestro->limpiarInstancia(); $objeto = IgepSession::damePanel($nombreClaseDetalle); $jsLoadScript = ''; //Recuperamos mensaje if(IgepSession::existeMensaje($nombreClaseDetalle)) { $mensaje = IgepSession::dameMensaje($nombreClaseDetalle); $jsLoadScript .= gvHidraUTF8::toUTF8(IgepSmarty::getJsMensaje($mensaje)); IgepSession::borraMensaje($nombreClaseDetalle); }; //Recuperamos scripts if(isset($objeto->obj_IgSmarty) and is_object($objeto->obj_IgSmarty)) { $jsLoadScript .= $objeto->obj_IgSmarty->getScriptLoad(false); } ob_clean(); header( "Cache-Control: no-store, no-cache, must-revalidate, max-age=0" ); header( "Cache-Control: post-check=0, pre-check=0", false ); header( "Pragma: no-cache"); if ( !empty($idVentana)) { $params = array ( 'path' => '', 'context' => array( 'targetType' => 'JDialog' , 'action' => 'gvHidraOpenJDialog' , 'claseM' => $nombreClaseDetalle , 'idVentana' => $idVentana , 'script' => $jsLoadScript , ) ); } else { $params = array ( 'path' => '' , 'context' => array( 'targetType' => 'self' , 'action' => 'reload' , ) ); } $response = json_encode( $params, JSON_FORCE_OBJECT ); echo $response; ob_flush(); die; case 'defaultPrint': $nombreClase = $_REQUEST['claseManejadora']; $actuaSobre = $_REQUEST['actuaSobre']; $titulo = $_REQUEST['titulo']; $objClase = IgepSession::damePanel( $nombreClase ); $objClase->regenerarInstancia(); if( !isset($actuaSobre) ) { $actuaSobre = 'tabla'; } if( $actuaSobre=='ficha' ) { $data = $objClase->getResultForEdit(); } else { $data = $objClase->getResultForSearch(); } $num_columnas = count( $data[0] ); $nom_columnas = array_keys( $data[0] ); $total_registros = count( $data ); ob_end_clean(); ob_start(); $html = << Impresión página - $titulo cabecera; if( $actuaSobre=='ficha' ) { $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; foreach( $data as $index => $row ) { $html .= "\n"; $html .= "\n"; foreach( $row as $name => $value ) { $html .= "\n"; $html .= ""; $html .= "\n"; $html .= "\n"; } $html.=""; $html.="\n"; $html.="\n"; $html.="\n"; } //Contador $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
    $titulo
    "; if( empty($name) ) { $name = " "; } else { $name .= ': '; } $html .= $name; $html .= ""; if( empty($value) ) { $value = " "; } elseif(is_array($value)) { $value = $value['seleccionado']; } $html .= $value."
    "; $html .= "
    "; $html.= "Registro ".(++$index).""; $html.="
    Total registros: $total_registros
    \n"; $html .= "\n"; $html .= "\n"; } else { $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; foreach( $nom_columnas as $col ) { if( empty($col) ) { $col = " "; } $html .= "\n"; } $html .= "\n"; $html .= "\n"; foreach( $data as $row ) { $html .= "\n"; $html .= "\n"; $html .= "\n"; foreach( $row as $field ) { if( empty($field) ) { $field = " "; } elseif( is_array($field) ) { $field = $field['seleccionado']; } $html .= "\n"; } $html .= "\n"; $html .= "\n"; } //Contador $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "
    $titulo
    $col
    $field
    Total registros: $total_registros
    \n"; $html .= "\n"; $html .= "\n"; } print $html; die; break; case 'exportCSV': $nombreClase = $_REQUEST['claseManejadora']; $actuaSobre = $_REQUEST['actuaSobre']; $objClase = IgepSession::damePanel( $nombreClase ); $objClase->regenerarInstancia(); if( !isset($actuaSobre) ) { $actuaSobre = 'tabla'; } if( $actuaSobre=='ficha' ) { $data = $objClase->getResultForEdit(); } else { $data = $objClase->getResultForSearch(); } //Vaciamos la cache del navegador ob_end_clean(); ob_start(); $nombre_fich = 'listado-'.date('d-m-H-i-s'); /* $fecha_hoy = date('d/m/Y'); //Indicamos en el header que se trata de un csv header( "Content-Type: application/soffice" ); header( 'Content-Disposition: inline; filename='.$nombre_fich.'.csv' );*/ //Cabeceras $cabeceras = array_keys( $data[0] ); $content_csv = ''; foreach( $cabeceras as $col ) { //Comprobamos si tiene etiqueta para la columna. $type = $objClase->getFieldType( $col ); if( $type!=null AND $type->getLabel()!='' ) { //echo $type->getLabel()."\t"; $content_csv .= $type->getLabel()."\t"; } else { //echo $col."\t"; $content_csv .= $col."\t"; } } //echo PHP_EOL; $content_csv .= "\r\n"; foreach( $data as $row ) { foreach( $row as $field ) { if( is_object($field) and method_exists($field,'formatUser') ) { //Comprobación de fechas //echo gvHidraUTF8::toUTF8( $field->formatUser() ); $content_csv .= gvHidraUTF8::toUTF8( $field->formatUser() ); } elseif( is_array($field) ) { //Comprobación de listas $seleccionado = $field['seleccionado']; foreach( $field['lista'] as $value ) { if( $seleccionado==$value['valor'] ) { //echo $field['seleccionado'].' '.$value['descripcion']; $content_csv .= $field['seleccionado'].' '.$value['descripcion']; } } } else { //Quitamos retorno de carro //echo str_replace( "\r\n", '', $field ); $content_csv .= str_replace( "\r\n", '', $field ); } //echo "\t"; $content_csv .= "\t"; } //echo PHP_EOL; $content_csv .= "\r\n"; } //Vaciamos la cache //ob_end_flush(); //Ponemos este die para que corte la ejecución y no redireccione la pagina $params = array ( 'path' => '' , 'context' => array( 'targetType' => 'self' , 'action' => 'exportCSV' ) , 'csv' => array( 'content' => $content_csv, 'filename' => $nombre_fich.".csv" ) ); $response = json_encode( $params, JSON_FORCE_OBJECT ); echo $response; ob_flush(); die; break; default: die( 'Error: La acción '.$str_accion.' no se reconoce.' ); break; }//Fin switch return $actionForward; }// Fin de perform /*------------------------ METODOS DE LAS ACCIONES ------------------------*/ /** * Método encargado de realizar la recarga dinamica de las listas Dependientes. */ public function calcularCamposDependientes() { //Creamos un objeto para la gestión de javascript $this->obj_IgSmarty = new IgepSmarty(); //Recogemos los datos del comunicacion $datosCampoDependiente = $this->comunica->dameDatos('camposDependientes'); //Descomponemos el nombre del campo origen que nos viene con prefijos $descCampoOrigen = explode('___', $datosCampoDependiente['origen']); //El campo puede tener prefijo (cam__ , ins__) o no (si está en un panel de busqueda). Si tiene prefijo count(descCampoOrigen)>1 sino no if( count($descCampoOrigen)>1 ) { $campoOrigen = $descCampoOrigen[1]; } else { $campoOrigen = $descCampoOrigen[0]; } //Obtenemos los campos destino de la validación $destinos = explode( "," , $datosCampoDependiente['destino'] ); $destinosAdaptados = array(); foreach( $destinos as $indice => $dest ) { $destinosAdaptados[$indice] = str_replace( $campoOrigen, trim($dest), $datosCampoDependiente['origen'] ); } if( IgepSession::existePanel($datosCampoDependiente['claseManejadora']) ) { //Hacemos la nueva conexión. $objPanel = IgepSession::damePanel( $datosCampoDependiente['claseManejadora'] ); //si necesitamos dsn para regenerar lo obtenemos if( method_exists($objPanel,'getDSN') ) { $dsn = $objPanel->getDSN(); } $objPanel->regenerarInstancia( $dsn ); $objPanel->comunica = new IgepComunicacion( $objPanel->v_descCamposPanel ); $objPanel->comunica->setPanel( $_REQUEST['gvhpanel'] ); $objPanel->comunica->data2Arrays(); $objPanel->comunica->setOperation( 'visibles' ); $objPanel->comunica->posicionarEnTupla( $datosCampoDependiente['registroActivo'] ); //Validamos los campos antes de saltar // TODO: 02-09-2009. Toni: Validacion de datos en acciones de interfaz // Este codigo permite validar los datos al entrar en una accion de interfaz. // Esta comentado porque provoca efectos no deseados. Bloque la interfaz y no // deja que se ejectuen el resto de acciondes de interfaz. /* $validacionIgep = $objPanel->comunica->checkDataTypes(); if( $validacionIgep!= '0' ) { $jsMensajeError =IgepSmarty::getJsMensaje( new IgepMensaje('IGEP-17',array($validacionIgep)) ); $this->obj_IgSmarty->addPostScript( $jsMensajeError ); } else { */ //Si actualizamos listas, tenemos que recorrer cada uno de ellas para obtener la forma en que se cargan. $this->listasDependientesJs = $objPanel->_recalcularListasDependientes( $destinos, $destinosAdaptados ); $this->obj_IgSmarty->addPreScript( $this->listasDependientesJs ); //Ahora comprobamos si el campo origen tiene una validación. En este caso ejecutaremos la función de validación correspondiente $this->accionesInterfazJs = $objPanel->_accionesInterfaz( $campoOrigen, $datosCampoDependiente['origen'] ); $this->obj_IgSmarty->addPostScript( $this->accionesInterfazJs ); //Por el paso a PHP5 tenemos que eliminar la referencia del mensaje. $objPanel->obj_mensaje=null; // } $objPanel->limpiarInstancia(); unset( $objPanel ); } //Arreglamos los destinos IgepSession::guardaVariable( 'camposDependientes', 'formulario', $datosCampoDependiente['formulario'] ); IgepSession::guardaVariable( 'camposDependientes', 'origen', $datosCampoDependiente['origen'] ); IgepSession::guardaVariable( 'camposDependientes', 'obj_jsOculto', $this->obj_IgSmarty ); return 0; } //Fin de calcularCamposDependientes /** * Método encargado de realizar las operaciones necesarias para la fase de apertura de una ventana de Selección * * @param ActionMapping $actionMapping */ public function abrirVentanaSeleccion( $actionMapping ) { $datosVentana = $this->comunica->dameDatos( 'abrirVentanaSeleccion' ); $coleccionVentanas = IgepSession::dameVariable( $datosVentana['claseManejadora'], 'v_ventanasSeleccion' ); $actionForward = $actionMapping->get( 'IgepVentanaSeleccion' ); if( isset($coleccionVentanas[$datosVentana['nomCampo']]) ) { $size = $coleccionVentanas[$datosVentana['nomCampo']]->getWindowSize(); $coleccionVentanas[$datosVentana['nomCampo']]->abrirVentanaSeleccion( $datosVentana ); $coleccionVentanas[$datosVentana['nomCampo']]->buscarVentanaSeleccion( $datosVentana, $this->obj_errorNegocio ); $actionForward->put( 'IGEPmodalWidth' , $size['width'] ); $actionForward->put( 'IGEPmodalHeight', $size['height'] ); } else { $panelVentanaSeleccion = array(); $panelVentanaSeleccion['mensaje'] = new IgepMensaje( 'IGEP-19', array($datosVentana['nomCampo'],$datosVentana['claseManejadora']) ); IgepSession::_guardaPanelIgep( 'ventanaSeleccion', $panelVentanaSeleccion ); } return $actionForward; } /** * Método encargado de realizar las operaciones necesarias para la fase de busqueda de una ventana de Selección * * @return int */ public function buscarVentanaSeleccion() { $datosVentana = $this->comunica->dameDatos( 'abrirVentanaSeleccion' ); $coleccionVentanas = IgepSession::dameVariable( $datosVentana['claseManejadora'], 'v_ventanasSeleccion' ); if( isset($coleccionVentanas[$datosVentana['nomCampo']]) ) { $coleccionVentanas[$datosVentana['nomCampo']]->buscarVentanaSeleccion( $datosVentana ); } return 0; } /** * Funcion que ordena cursores (vectores de registros) * por la clave que se indique por argumento y de forma * ascedente o descendente. * TODO: * Si no se define el tipo en v_descCampos, se puede intentar obtener el tipo * a partir del valor de la primera fila * Esta funcion solo se llama desde IgepAccionesGenericas donde no se * inicializa el dsn, luego de momento no se pueden obtener fechas ni numeros * si no se han declarado * * @private * @param array $cursor * @param string $clave * @param string $tipo * @param string $orden */ private function ordenarCursor( & $cursor, $clave, $tipo, $orden = 'asc') { if (count($cursor) < 2) { return; } //Inicializacion de variables $vectorClave = array (); $cursorOrdenado = array (); $es_numero = ($tipo==TIPO_DECIMAL OR $tipo==TIPO_ENTERO); $es_fecha = ($tipo==TIPO_FECHA OR $tipo==TIPO_FECHAHORA); if( $es_fecha ) { $tipoOrdenacion = SORT_REGULAR; } elseif( $es_numero ) { $tipoOrdenacion = SORT_NUMERIC; } else { $tipoOrdenacion = SORT_STRING; } foreach( $cursor as $fila => $valor ) { $vectorClave[$fila] = $valor[$clave]; } if( $tipoOrdenacion == SORT_STRING ) { if (count($vectorClave) == count($vectorClave, COUNT_RECURSIVE) ) { function fnCustomComparer ($a, $b) { $a = iconv ('UTF-8', 'ASCII//TRANSLIT//IGNORE', $a); $b = iconv ('UTF-8', 'ASCII//TRANSLIT//IGNORE', $b); return strcasecmp($a, $b); } // Para ordenar sin distinguir entre mayúsculas y minúsculas //uasort( $vectorClave, 'strcasecmp' ); uasort( $vectorClave, 'fnCustomComparer' ); if( strtolower($orden) != 'asc' ) // Reverse para ordenación descendente $vectorClave = array_reverse( $vectorClave, true ); } else { // Ordenamos por campo tipo lista if( strtolower($orden) == 'asc' ) { uasort( $vectorClave, array(__CLASS__,'sortBySelectedAsc') ); } else { uasort( $vectorClave, array(__CLASS__,'sortBySelectedDesc') ); } } } else { if( strtolower($orden) == 'asc' ) { asort( $vectorClave, $tipoOrdenacion ); } else { arsort( $vectorClave, $tipoOrdenacion ); } } foreach( $vectorClave as $fila => $valor ) { $cursorOrdenado[] = $cursor[$fila]; } $cursor = $cursorOrdenado; } private static function sortBySelectedAsc($a, $b) { if( $a['seleccionado'] == $b['seleccionado'] ) { return 0; } return ($a['seleccionado'] < $b['seleccionado']) ? -1 : 1; } private static function sortBySelectedDesc($a, $b) { if( $a['seleccionado'] == $b['seleccionado'] ) { return 0; } return ($a['seleccionado'] > $b['seleccionado']) ? -1 : 1; } /** * Método isModal * * @return boolean */ public final function isModal() { return $this->_modal; } /** * Método setModal * * @param boolean $value */ public final function setModal( $value ) { $this->_modal = $value; } /** * Método getCloseModalWindow * * @return boolean */ public function getCloseModalWindow() { return $this->_closeModal; } /** * Método setCloseModalWindow * * @param boolean $value */ public function setCloseModalWindow( $value ) { $this->_closeModal = $value; } } //End IgepAccionesGenericas