function miForm() { // Rescatar los datos de este bloque $esteBloque = $this->miConfigurador->getVariableConfiguracion("esteBloque"); $miPaginaActual = $this->miConfigurador->getVariableConfiguracion('pagina'); $directorio = $this->miConfigurador->getVariableConfiguracion("host"); $directorio .= $this->miConfigurador->getVariableConfiguracion("site") . "/index.php?"; $directorio .= $this->miConfigurador->getVariableConfiguracion("enlace"); $rutaBloque = $this->miConfigurador->getVariableConfiguracion("host"); $rutaBloque .= $this->miConfigurador->getVariableConfiguracion("site") . "/blocks/"; $rutaBloque .= $esteBloque['grupo'] . '/' . $esteBloque['nombre']; // ---------------- SECCION: Parámetros Globales del Formulario ---------------------------------- /** * Atributos que deben ser aplicados a todos los controles de este formulario. * Se utiliza un arreglo * independiente debido a que los atributos individuales se reinician cada vez que se declara un campo. * * Si se utiliza esta técnica es necesario realizar un mezcla entre este arreglo y el específico en cada control: * $atributos= array_merge($atributos,$atributosGlobales); */ $atributosGlobales['campoSeguro'] = 'true'; $_REQUEST['tiempo'] = time(); // ---------------- SECCION: Parámetros Generales del Formulario ---------------------------------- $esteCampo = $esteBloque['nombre']; $atributos['id'] = $esteCampo; $atributos['nombre'] = $esteCampo; // Si no se coloca, entonces toma el valor predeterminado 'application/x-www-form-urlencoded' $atributos['tipoFormulario'] = 'multipart/form-data'; // Si no se coloca, entonces toma el valor predeterminado 'POST' $atributos['metodo'] = 'POST'; // Si no se coloca, entonces toma el valor predeterminado 'index.php' (Recomendado) $atributos['action'] = 'index.php'; // $atributos ['titulo'] = $this->lenguaje->getCadena ( $esteCampo ); // Si no se coloca, entonces toma el valor predeterminado. $atributos['estilo'] = ''; $atributos['marco'] = true; $tab = 1; // ---------------- FIN SECCION: de Parámetros Generales del Formulario ---------------------------- // ----------------INICIAR EL FORMULARIO ------------------------------------------------------------ $atributos['tipoEtiqueta'] = 'inicio'; echo $this->miFormulario->formulario($atributos); unset($atributos); // ---------------- SECCION: Controles del Formulario ----------------------------------------------- // ----------------INICIAR EL CALENDARIO ----------------------------------------------------------- $esteCampo = "Calendario1"; $atributos['id'] = $esteCampo; // Enlace que lleva a la funcion de PHP invocada por AJAX $cadenaACodificar = "pagina=" . $miPaginaActual; $cadenaACodificar .= "&procesarAjax=true"; $cadenaACodificar .= "&action=index.php"; $cadenaACodificar .= "&bloqueNombre=" . $esteBloque["nombre"]; $cadenaACodificar .= "&bloqueGrupo=" . $esteBloque["grupo"]; $cadenaACodificar .= "&funcion=consultarAgenda"; $cadenaACodificar .= "&tiempo=" . $_REQUEST['tiempo']; // Codificar las variables $cadena = $this->miConfigurador->fabricaConexiones->crypto->codificar_url($cadenaACodificar); // URL definitiva $urlPeticion = $directorio . $cadena; $atributos["enlace"] = $urlPeticion; $contenidoCalendario = $this->miFormulario->getCalendario($atributos); unset($atributos); // ----------------FIN EL CALENDARIO --------------------------------------------------------------- // ----------------INICIO OBTENER DATOS ACCORDIONCONTAINER ----------------------------------------------------------- $conexion = 'bienestar'; $esteRecursoDB = $this->miConfigurador->fabricaConexiones->getRecursoDB($conexion); $cadenaSql = $this->miSql->getCadenaSql('buscarModalidades', ''); $resultado = $esteRecursoDB->ejecutarAcceso($cadenaSql, 'busqueda'); /** * La estructura de árbol se ha basado en el proyecto: * https://github.com/JorgeUlises/treePHP * Rediríjase allí para consultar el concepto. */ /** * Se crea un arbol a partir de las filas resultantes de una consulta SQL y los Id's de las Filas. */ function crearArbol($resultado, $ids) { foreach ($ids as $index => $id) { $valores[$index] = array_values(array_column($resultado, $id)); } function agregar(&$obj, $niveles, $valores, $inicial = 0) { if ($inicial == $niveles) { return true; } else { if (!isset($obj[$valores[$inicial]])) { $obj[$valores[$inicial]] = array(); } $objen =& $obj[$valores[$inicial]]; $inicial++; agregar($objen, $niveles, $valores, $inicial); } } $arreglo = array(); $niveles = count($valores); foreach ($valores[0] as $index => $valor) { for ($i = 0; $i < $niveles; $i++) { $valoresNivel[$i] = $valores[$i][$index]; } agregar($arreglo, $niveles, $valoresNivel); } return $arreglo; } /** * Con esta funcion se puede buscar en un arreglo y retorna la primera coincidencia que se encuentre. * El $callback sirve para evaluar las filas individualmente en busca de una condicion. * Funciona similar a la funcion array_filter. */ function array_findUnique($a, $callback) { foreach ($a as $k) { $cond = $callback($k); if ($cond) { return $k; } } return false; } /* * Esta función construye los atributos de la jerarquía JSON haciendo foreach a los niveles del árbol. * Esta función no es dinámica, por tanto hay que saber el número de niveles y los campos que trae la consulta SQL. */ function crearArregloPorNiveles($arbol, $filas, $idNiveles) { $response = array(); foreach ($arbol as $nivel1 => $valnivel1) { $fila = array_findUnique($filas, function ($k) use($idNiveles, $nivel1) { return $k[$idNiveles[0]] == $nivel1; }); array_push($response, array('id_modalidad' => $fila['id_modalidad'], 'descripcion' => $fila['descripcion_modalidad'], 'sede' => array())); foreach ($valnivel1 as $nivel2 => $valnivel2) { $fila = array_findUnique($filas, function ($k) use($idNiveles, $nivel1, $nivel2) { return $k[$idNiveles[0]] == $nivel1 && $k[$idNiveles[1]] == $nivel2; }); array_push($response[count($response) - 1]['sede'], array('id_sede' => $fila['id_sede'], 'abreviatura' => $fila['abreviatura_sede'], 'consultorio' => array(), 'profesional' => array())); foreach ($valnivel2 as $nivel3 => $valnivel3) { $fila = array_findUnique($filas, function ($k) use($idNiveles, $nivel1, $nivel2, $nivel3) { return $k[$idNiveles[0]] == $nivel1 && $k[$idNiveles[1]] == $nivel2 && $k[$idNiveles[2]] == $nivel3; }); array_push($response[count($response) - 1]['sede'][count($response[count($response) - 1]['sede']) - 1]['consultorio'], array('id_consultorio' => $fila['id_consultorio'], 'nombre' => $fila['nombre_consultorio'])); array_push($response[count($response) - 1]['sede'][count($response[count($response) - 1]['sede']) - 1]['profesional'], array('id_profesional' => $fila['id_profesional'], 'nombre_persona' => $fila['nombre_persona'])); } } } return $response; } /* * Con esta funcion se obtiene como respuesta un Objeto en PHP para ser exportado a JSON. */ function unificarResultadosPorNiveles($resultado, $idNiveles) { $arbol = crearArbol($resultado, $idNiveles); $response = crearArregloPorNiveles($arbol, $resultado, $idNiveles); return $response; } $resultado = unificarResultadosPorNiveles($resultado, ['id_modalidad', 'id_sede', 'id_profesional']); // ----------------FIN OBTENER DATOS ACCORDIONCONTAINER ----------------------------------------------------------- // ----------------INICIAR EL ACCORDIONCONTAINER ----------------------------------------------------------- $esteCampo = "Contenedor1"; $atributos['id'] = $esteCampo; // $atributos ['modalidad'] = array( // [ // 'id_modalidad' => 12, // 'descripcion' => 'Medicina', // 'sede' => array( // [ // 'id_sede' => 001, // 'abreviatura' => 'FSSK', // 'consultorio' => array( // [ // 'id_consultorio' => 001, // 'nombre' => 'Consultorio 1', // ], // [ // 'id_consultorio' => 002, // 'nombre' => 'Consultorio 2', // ] // ), // 'profesional' => array( // [ // 'id_profesional' => 001, // 'nombre_persona' => 'Juan Aparicio', // ], // [ // 'id_profesional' => 002, // 'nombre_persona' => 'Juana de Arco', // ] // ) // ], // [ // 'id_sede' => 002, // 'abreviatura' => 'MMYYYY', // 'consultorio' => array ( // [ // 'id_consultorio' => 001, // 'nombre' => 'Consultorio 1' // ], // [ // 'id_consultorio' => 002, // 'nombre' => 'Consultorio 2' // ] // ), // 'profesional' => array ( // [ // 'id_profesional' => 001, // 'nombre_persona' => 'El nombre más creativo' // ], // [ // 'id_profesional' => 002, // 'nombre_persona' => 'El nombre más creativo 2' // ] // ) // ] // ) // ], // [ // 'id_modalidad' => 13, // 'descripcion' => 'Odontología', // 'sede' => array( // [ // 'id_sede' => 002, // 'abreviatura' => 'MMYYY', // 'consultorio' => array( // [ // 'id_consultorio' => 1001, // 'nombre' => 'Consultorio 10', // ], // [ // 'id_consultorio' => 100, // 'nombre' => 'Consultorio 2', // ] // ), // 'profesional' => array( // [ // 'id_profesional' => 015, // 'nombre_persona' => 'Pedro Paulo', // ], // [ // 'id_profesional' => 010, // 'nombre_persona' => 'Elma Frodita', // ] // ) // ] // ) // ] // ); $atributos['modalidad'] = $resultado; $contenidoAccordion = $this->miFormulario->getAccordionContainer($atributos); unset($atributos); // ----------------FIN EL ACCORDIONCONTAINER --------------------------------------------------------------- // ----------------INICIAR EL BOTON DE SUBMIT ----------------------------------------------------------- $atributos["id"] = "botonSubmit1"; $atributos['idCalendario'] = 'Calendario1'; $atributos["texto"] = "Guardar Agenda"; $atributos["clase"] = "btn-default btn-lg"; // Enlace que lleva a la funcion de PHP invocada por AJAX $cadenaACodificar = "pagina=" . $miPaginaActual; $cadenaACodificar .= "&procesarAjax=true"; $cadenaACodificar .= "&action=index.php"; $cadenaACodificar .= "&bloqueNombre=" . $esteBloque["nombre"]; $cadenaACodificar .= "&bloqueGrupo=" . $esteBloque["grupo"]; $cadenaACodificar .= "&funcion=registrarAgenda"; $cadenaACodificar .= "&tiempo=" . $_REQUEST['tiempo']; // Codificar las variables $cadena = $this->miConfigurador->fabricaConexiones->crypto->codificar_url($cadenaACodificar); // URL definitiva $urlPeticion = $directorio . $cadena; $atributos["enlace"] = $urlPeticion; $contenidoBoton = $this->miFormulario->getBoton($atributos); unset($atributos); // ----------------FIN EL BOTON DE SUBMIT ----------------------------------------------------------- // ----------------INICIAR EL CONTENEDOR ----------------------------------------------------------- $esteCampo = "Contenedor2"; $atributos['id'] = $esteCampo; $atributos['nodos'] = array($contenidoAccordion, $contenidoCalendario . $contenidoBoton); $atributos['clases'] = array('col-md-2', 'col-md-10'); echo $this->miFormulario->getContainer($atributos); unset($atributos); // ----------------FIN EL CONTENEDOR --------------------------------------------------------------- // ---------------- FIN SECCION: Controles del Formulario ----------------------------------------------- // ----------------FINALIZAR EL FORMULARIO ------------------------------------------------------------ $atributos['marco'] = true; $atributos['tipoEtiqueta'] = 'fin'; echo $this->miFormulario->formulario($atributos); }
* Esta es una variable que carga el resultado de la lectura de un JSON. */ $resultadoJSON = file_get_contents('resultado_consulta.json'); /* * Se codifica el JSON como una variable PHP. */ $resultadoJSON = json_decode($resultadoJSON, true); /* * Se imprime en pantalla las filas para comodidad del usuario. */ printRows($resultadoJSON); /* * Las llaves de la consulta jerárquica se guardan en orden en un arreglo. */ $idsLlaves = array('id_modalidad', 'id_sede', 'id_profesional'); /* * Se ingresan los parámetros de Filas del SQL y las respectivas llaves que se establecieron en la consulta. */ $resultadoArray = unificarResultadosPorNiveles($resultadoJSON, $idsLlaves); /* * Se imprime en pantalla en código en JSON. */ echo "<h3>Resultado en JSON:</h3>"; echo '<pre>'; echo json_encode($resultadoArray, JSON_PRETTY_PRINT); echo '</pre>'; ?> </body> </html>
} } return $response; } /* * Con esta funcion se obtiene como respuesta un Objeto en PHP para ser exportado a JSON. */ function unificarResultadosPorNiveles($rows, $idNiveles) { $arbol = crearArbol($rows, $idNiveles); $response = crearArregloPorNiveles($arbol, $rows, $idNiveles); return $response; } /* * Esta es una variable que simula el resultado de la respuesta de una consulta. */ $resultadoSQL = array(0 => array(0 => '1', 'id_modalidad' => '1', 1 => 'MEDICINA', 'descripcion_modalidad' => 'MEDICINA', 2 => '1', 'id_sede' => '1', 3 => 'FCMA', 'abreviatura_sede' => 'FCMA', 4 => '1', 'id_consultorio' => '1', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 1 => array(0 => '1', 'id_modalidad' => '1', 1 => 'MEDICINA', 'descripcion_modalidad' => 'MEDICINA', 2 => '4', 'id_sede' => '4', 3 => 'FCMB', 'abreviatura_sede' => 'FCMB', 4 => '3', 'id_consultorio' => '3', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 2 => array(0 => '2', 'id_modalidad' => '2', 1 => 'ODONTOLOGÍA', 'descripcion_modalidad' => 'ODONTOLOGÍA', 2 => '1', 'id_sede' => '1', 3 => 'FCMA', 'abreviatura_sede' => 'FCMA', 4 => '1', 'id_consultorio' => '1', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 3 => array(0 => '2', 'id_modalidad' => '2', 1 => 'ODONTOLOGÍA', 'descripcion_modalidad' => 'ODONTOLOGÍA', 2 => '2', 'id_sede' => '2', 3 => 'FMVI', 'abreviatura_sede' => 'FMVI', 4 => '2', 'id_consultorio' => '2', 5 => 'consultorio 2', 'nombre_consultorio' => 'consultorio 2', 6 => '2', 'id_profesional' => '2', 7 => 'E01010101', 'documento_persona' => 'E01010101', 8 => 'NEIFY CUELLAR', 'nombre_persona' => 'NEIFY CUELLAR'), 4 => array(0 => '2', 'id_modalidad' => '2', 1 => 'ODONTOLOGÍA', 'descripcion_modalidad' => 'ODONTOLOGÍA', 2 => '4', 'id_sede' => '4', 3 => 'FCMB', 'abreviatura_sede' => 'FCMB', 4 => '3', 'id_consultorio' => '3', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 5 => array(0 => '2', 'id_modalidad' => '2', 1 => 'ODONTOLOGÍA', 'descripcion_modalidad' => 'ODONTOLOGÍA', 2 => '4', 'id_sede' => '4', 3 => 'FCMB', 'abreviatura_sede' => 'FCMB', 4 => '3', 'id_consultorio' => '3', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '2', 'id_profesional' => '2', 7 => 'E01010101', 'documento_persona' => 'E01010101', 8 => 'NEIFY CUELLAR', 'nombre_persona' => 'NEIFY CUELLAR'), 6 => array(0 => '3', 'id_modalidad' => '3', 1 => 'PSICOLOGÍA', 'descripcion_modalidad' => 'PSICOLOGÍA', 2 => '1', 'id_sede' => '1', 3 => 'FCMA', 'abreviatura_sede' => 'FCMA', 4 => '1', 'id_consultorio' => '1', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 7 => array(0 => '3', 'id_modalidad' => '3', 1 => 'PSICOLOGÍA', 'descripcion_modalidad' => 'PSICOLOGÍA', 2 => '1', 'id_sede' => '1', 3 => 'FCMA', 'abreviatura_sede' => 'FCMA', 4 => '1', 'id_consultorio' => '1', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '3', 'id_profesional' => '3', 7 => '10101010', 'documento_persona' => '10101010', 8 => 'ULISES USECHE DELGADO', 'nombre_persona' => 'ULISES USECHE DELGADO'), 8 => array(0 => '3', 'id_modalidad' => '3', 1 => 'PSICOLOGÍA', 'descripcion_modalidad' => 'PSICOLOGÍA', 2 => '4', 'id_sede' => '4', 3 => 'FCMB', 'abreviatura_sede' => 'FCMB', 4 => '3', 'id_consultorio' => '3', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '1', 'id_profesional' => '1', 7 => '1000000000', 'documento_persona' => '1000000000', 8 => 'NEIFY NATHALYA USECHE CUELLAR', 'nombre_persona' => 'NEIFY NATHALYA USECHE CUELLAR'), 9 => array(0 => '3', 'id_modalidad' => '3', 1 => 'PSICOLOGÍA', 'descripcion_modalidad' => 'PSICOLOGÍA', 2 => '4', 'id_sede' => '4', 3 => 'FCMB', 'abreviatura_sede' => 'FCMB', 4 => '3', 'id_consultorio' => '3', 5 => 'consultorio 1', 'nombre_consultorio' => 'consultorio 1', 6 => '3', 'id_profesional' => '3', 7 => '10101010', 'documento_persona' => '10101010', 8 => 'ULISES USECHE DELGADO', 'nombre_persona' => 'ULISES USECHE DELGADO'), 10 => array(0 => '4', 'id_modalidad' => '4', 1 => 'FISIOTERAPIA', 'descripcion_modalidad' => 'FISIOTERAPIA', 2 => '100', 'id_sede' => '100', 3 => 'FCPO', 'abreviatura_sede' => 'FCPO', 4 => '4', 'id_consultorio' => '4', 5 => 'consultorio 1 postgrados', 'nombre_consultorio' => 'consultorio 1 postgrados', 6 => '4', 'id_profesional' => '4', 7 => '92100950407', 'documento_persona' => '92100950407', 8 => 'KAREN MARIANA USECHE CUELLAR', 'nombre_persona' => 'KAREN MARIANA USECHE CUELLAR'), 11 => array(0 => '4', 'id_modalidad' => '4', 1 => 'FISIOTERAPIA', 'descripcion_modalidad' => 'FISIOTERAPIA', 2 => '100', 'id_sede' => '100', 3 => 'FCPO', 'abreviatura_sede' => 'FCPO', 4 => '5', 'id_consultorio' => '5', 5 => 'consultorio 4', 'nombre_consultorio' => 'consultorio 4', 6 => '4', 'id_profesional' => '4', 7 => '92100950407', 'documento_persona' => '92100950407', 8 => 'KAREN MARIANA USECHE CUELLAR', 'nombre_persona' => 'KAREN MARIANA USECHE CUELLAR')); /* * Las llaves de la consulta jerárquica se guardan en orden en un arreglo. */ $idsKeysSQL = array('id_modalidad', 'id_sede', 'id_profesional'); /* * Se ingresan los parámetros de Filas del SQL y las respectivas llaves que se establecieron en la consulta. */ $resultadoArray = unificarResultadosPorNiveles($resultadoSQL, $idsKeysSQL); /* * Se imprime en pantalla en código en JSON. */ echo '<pre>'; echo json_encode($resultadoArray, JSON_PRETTY_PRINT); echo '</pre>';