Advertisement
FCY381

Master-Grid

Nov 24th, 2015
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3.   include("funciones_php.php");
  4.   list($u_nombre,$u_logon) = seguridad();
  5.  
  6.   // Le indica al servidor web, y específicamente al módulo PHP, que sirva los archivos .php con codificación UTF8
  7.   //de forma tal que, entre otras cosas, las palabras acentuadas se vean correctamente.
  8.   header('Content-Type: text/html; charset=UTF-8');    
  9.  
  10.   // Indico cual es la zona horaria para nuestra ubicación geográfica.
  11.   date_default_timezone_set('America/Argentina/Buenos_Aires');
  12.  
  13.   // Incluyo el archivo de configuración que contiene la data que permite conectarse a la base de datos en el motor de datos.
  14.   include_once("configuracion_acceso_motor_de_datos.php");
  15.  
  16.   // Con la informacion incluída en "configuracion_acceso_motor_de_datos.php" me conecto efectivamente a la base de datos en el motor de datos.
  17.   mysql_connect(PHPGRID_DBHOST,PHPGRID_DBUSER,PHPGRID_DBPASS);
  18.   mysql_select_db(PHPGRID_DBNAME);
  19.  
  20.   // Le indico al motor de datos que la codificación con la que debe trabajar es UTF8. De esta forma los datos
  21.   //se guardaran y recuperaran con esa codificación.  
  22.   mysql_query ("SET NAMES 'utf8'");
  23.  
  24.   include(PHPGRID_LIBPATH."inc/jqgrid_dist.php");
  25.  
  26.   // Creo una grilla.  
  27.   $g = new jqgrid();
  28.  
  29.   // Le asigno un título a la grilla.
  30.   $grid["caption"] = "Destinos Turísticos";
  31.  
  32.   // Coloco la barra de opciones en la parte superior de la grilla.
  33.   $grid["toolbar"] = "top";
  34.  
  35.   // Permito la selección de varios registros a la vez.  
  36.   $grid["multiselect"] = true;
  37.  
  38.   // Permito que la grilla se redimensione acompañando la dimensiones del navegador. Es decir si el usuario
  39.   //achica el ancho del navegador entonces la grilla también se achicará en la misma proporsión.
  40.   $grid["autoresize"] = true;
  41.  
  42.   // Si permito que se expanda la grilla al ancho de la pantalla.
  43.   $grid["autowidth"] = true;  
  44.  
  45.   // Permito que los registros se muestren en forma descendente. Es decir el primer registro listado será el último que se ingresó.  
  46.   $grid["sortorder"] = "DESC";  
  47.  
  48.   // Indico que anchura debe tener el formulario en el modo "Nuevo Registro".
  49.   $grid["add_options"] = array('width'=>'620');
  50.  
  51.   // Indico que anchura debe tener el formulario en el modo "Edición de un Registro".
  52.   $grid["edit_options"] = array('width'=>'620');
  53.  
  54.   // Indico que anchura debe tener el formulario en el modo "Vista de un Registro".
  55.   $grid["view_options"] = array('width'=>'620');
  56.  
  57.   // Indico que altura debe tener la grilla.
  58.   $grid["height"] = "";
  59.  
  60.   // Indico cual es el mensaje que se debe mostrar cuando se están cargando los registros en la grilla.  
  61.   $grid["loadtext"] = "Cargando ...";
  62.  
  63.   // Indico con que modo voy a trabajar con la grilla; si con páginas de registros o que sólo se carguen registros a medida que el scroll
  64.   //lo vaya pidiendo. Utilizo el último ya que es útil para manejar "records set" de gran tamaño.
  65.   $grid["scroll"] = false;
  66.  
  67.   //  Indico que para la columna "Actions" se utilicen íconos en lugar de palabras.
  68.   $grid["actionicon"] = true;  
  69.  
  70.   // Indico que no se recargue la grilla luego de haberse editado un registro.
  71.   $grid["reloadedit"] = false;
  72.  
  73.   // Indico que no se recargue la grilla luego de haberse insertado un registro.  
  74.   $grid["reloadinsert"] = false;
  75.  
  76.   // Permite que al cerrar el formulario de "Nuevo Registro" se recargue automáticamente toda la página.  
  77.   $grid["add_options"]["afterSubmit"] = "function(){ window.location.reload(); return [true,'']; }";  
  78.  
  79.   // Permite habilitar el mecanismo de subgrilla -- by default 'rowid' (PK) of parent is passed
  80.   $grid["subGrid"] = true;
  81.   // Relacionada con la línea anterior, permite indicar la página web que renderiza la subgrilla.    
  82.   $grid["subgridurl"] = "grilla_aperturas.php";
  83.  
  84.   // Permite pasar a la página que renderiza la subgrilla la clave del registro que el usuario selecciona.
  85.   $grid["subgridparams"] = "d_id, d_nombre";
  86.   // Permite enviar a la página que renderiza la subgrilla otros campos del registro que el usuario
  87.   //selecciona, y que deben ser recuperados con $_POST.  
  88.   // $grid["subgridparams"] = "p_provincia,pciudad,p_calle";
  89.  
  90.   // Definidas las propiedades que quiero tenga la grilla le informo a ésta de ellas.
  91.   $g->set_options($grid);  
  92.  
  93.   // Le indico a al grilla que tabla de la base de datos va a estar unido a ella.
  94.   $g->table = "destinos";  
  95.  
  96.   // Indico que quiero capturar el evento on_insert y defino la función de callback llamada "insert_row".
  97.   // Al ser el tercer parámetro "true" significa que primero se ejecuta la función de callback y luego
  98.   //el código de actualización de la grilla.
  99.   $e["on_insert"] = array("insert_row", null, true);
  100.  
  101.   // Indico que quiero capturar el evento on_update y defino la función de callback llamada "update_row".
  102.   // Al ser el tercer parámetro "true" significa que primero se ejecuta la función de callback y luego
  103.   //el código de actualización de la grilla.
  104.   $e["on_update"] = array("update_row", null, true);
  105.  
  106.   // Indico que quiero capturar el evento on_delete y defino la función de callback llamada "delete_row".
  107.   // Al ser el tercer parámetro "false" significa que toda la lógica para borrar el registro esta en
  108.   //la función de callback y entonces se anula la operación de eliminación por defecto que hace la grilla.
  109.   $e["on_delete"] = array("delete_row", null, false);  
  110.  
  111.   // Esta función de callback permite actuar al capturar el evento "on_insert". Recibe como dato de entrada
  112.   //una variable "$data" que contiene todos los datos que se indicaron en el formulario "Nuevo Registro".
  113.   function insert_row($data)
  114.     {
  115.     $data["params"]["d_estampilla_tiempo"] = date("Y-m-d H:i:s");
  116.     }                
  117.  
  118.   // Esta función de callback permite actuar al capturar el evento "on_update". Recibe como dato de entrada
  119.   //una variable "$data" que contiene todos los datos que se indicaron en el formulario de "Edición de un Registro".
  120.   //Y lo que hace es considerar el caso en donde se intenta editar un registro que fue eliminado por otro usuario, y
  121.   //el caso en donde se intenta editar un registro que fue editado previamente por otro usuario. En ambos cados nos
  122.   //muestra un mensaje de que debemos refrescar la página.  
  123.   function update_row($data)
  124.     {              
  125.     $sentencia_sql = "select * from destinos where d_id = ' {$data["d_id"]} '" ;        
  126.     $resultado = mysql_query($sentencia_sql);
  127.     $nro_registros = mysql_num_rows($resultado);                    
  128.     if ( $nro_registros == 0)
  129.       phpgrid_error('Este registro ha sido eliminado por otro usuario y es por ello que no es posible ejecutar la tarea solicitada. Por favor refresque la página (tecla F5).');          
  130.       else
  131.         {
  132.         $rs = mysql_fetch_assoc($resultado);                  
  133.         if ( strtotime($rs["d_estampilla_tiempo"]) > strtotime($data["params"]["d_estampilla_tiempo"]) )
  134.           phpgrid_error('Este registro ha sido modificado por otro usuario, por favor refresque la página (tecla F5).');
  135.         else
  136.           {
  137.           // No se da ninguno de los casos anteriores entonces actualizo el campo "estampilla_tiempo"
  138.           //con una nueva estampilla de tiempo, y que luego será volcada en la tabla de la base de datos
  139.           //por código de la grilla.                                          
  140.           $data["params"]["d_estampilla_tiempo"] = date("Y-m-d H:i:s");          
  141.           };
  142.         };
  143.     };
  144.  
  145.   // Esta función de callback permite actuar al capturar el evento "on_delete". Recibe como dato de entrada
  146.   //una variable "$data".  
  147.   // Para el evento "on_delete" sólo es pasado el id del registro en cuestión. No es posible obtener información
  148.   //sobre ningún otro parámetro a menos que busque ésta explicitamente antes de eliminar el registro.  
  149.   function delete_row($data)
  150.     {
  151.     $d_id = $data["d_id"];
  152.     $sentencia_sql = "select a_id from aperturas where d_id = '".$d_id."'";          
  153.     $resultado = mysql_query($sentencia_sql);
  154.     $nro_registros = mysql_num_rows($resultado);                        
  155.     if ( $nro_registros > 0)
  156.       phpgrid_error('No es posible eliminar el destino ya que existen aperturas del mismo. Elimine esa(s) apertura(s) primero y vuelva a intentarlo.');          
  157.     else
  158.       {
  159.       $sentencia_sql = "delete from destinos where d_id = '".$d_id."'";            
  160.       $resultado = mysql_query($sentencia_sql);
  161.       };
  162.     };
  163.  
  164.   // Definidos los eventos que quiero capturar en la grilla le informo a ésta de ellos.
  165.   $g->set_events($e);
  166.  
  167.   // Indico propiedades de la columna "d_id".
  168.   $col = array();
  169.   $col["name"] = "d_id";
  170.   $col["title"] = "Id";
  171.   $col["edittype"] = "text";
  172.   //$col["width"] = "40";
  173.   $col["editoptions"] = array("size"=>45);
  174.   $col["hidden"] = true;
  175.   $col["editable"] = false;  
  176.   $cols[] = $col;
  177.  
  178.   // Indico propiedades de la columna "d_nombre".
  179.   $col = array();
  180.   $col["name"] = "d_nombre";
  181.   $col["title"] = "Nombre";
  182.   $col["edittype"] = "text";    
  183.   //$col["width"] = "0";
  184.   $col["editoptions"] = array("size"=>45);
  185.   $col["editoptions"]["onclick"] = "this.focus();this.select();";
  186.   $col["editrules"] = array("required"=>true);
  187.   $col["hidden"] = false;
  188.   $col["editable"] = true;    
  189.   $cols[] = $col;
  190.  
  191.   // Indico propiedades de la columna "d_estampilla_tiempo".
  192.   $col = array();
  193.   $col["name"] = "d_estampilla_tiempo";
  194.   $col["title"] = "Estampilla Tiempo";
  195.   $col["edittype"] = "text";
  196.   //$col["width"] = "0";
  197.   $col["editoptions"] = array("size"=>45);    
  198.   $col["hidden"] = true;
  199.   $col["editable"] = true;
  200.   $col["export"] = false;  
  201.   $cols[] = $col;
  202.  
  203.   // Indico propiedades de la columna "act".
  204.   $col = array();
  205.   $col["name"] = "act";
  206.   $col["title"] = "Acciones";  
  207.   //$col["width"] = "0";
  208.   $col["hidden"] = true;
  209.   $col["editable"] = false;
  210.   $col["export"] = false;  
  211.   $cols[] = $col;
  212.  
  213.   // Definidas las propiedades que quiero tengan cada una de las columnas de la grilla le informo a ésta de ellas.
  214.   $g->set_columns($cols,true);
  215.  
  216.   // Indico que acciones sí permito en la grilla y cuales no.
  217.   $g->set_actions
  218.         (
  219.         array
  220.           (
  221.           "add"=>true,
  222.           "edit"=>true,
  223.           "clone"=>false,
  224.           "bulkedit"=>false,                          
  225.           "delete"=>true,
  226.           "view"=>true,
  227.           "rowactions"=>false,
  228.           "export"=>false,
  229.           "autofilter"=>true,
  230.           "search"=>false,
  231.           "inlineadd"=>false,
  232.           "showhidecolumns"=>false
  233.           )
  234.         );
  235.   // Construyo la grilla y le asigno un nombre, que será único en la pagina html.
  236.   $out = $g->render("destinos");
  237.  
  238. ?>
  239.  
  240. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  241.  
  242. <html lang='es'>
  243.  
  244.   <head>    
  245.  
  246.     <!-- Definición de información metadata. -->  
  247.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  248.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  249.     <meta name="viewport" content="width=device-width, initial-scale=1">
  250.  
  251.     <!-- Título que le doy a la página. -->  
  252.     <title>BUDATRAVEL</title>
  253.  
  254.     <!-- Definición del ícono de la página. -->
  255.     <link rel="Shortcut Icon" href="images/icono.png">  
  256.  
  257.     <!-- Librerias CSS. -->
  258.     <!-- Hoja de estilos principal. -->
  259.     <link type="text/css" href="css/hoja_principal_estilos.css" rel="stylesheet" media="all"/><meta charset="utf-8">        
  260.     <!-- Hoja de estilos principal de la grilla. -->
  261.     <link rel="stylesheet" href="lib/js/jqgrid/css/ui.jqgrid.css"></link>    
  262.     <!-- Hoja de estilos correspondiente al theme JQueryUI en uso, que en este caso es "Eggplant",
  263.     y que además también es utilizada por la grilla. -->    
  264.     <link rel="stylesheet" href="lib/js/themes/hot-sneaks customizado/jquery-ui.css"></link>
  265.     <!-- Hoja de estilos principal del menú. -->
  266.     <link href="cssmenu/styles.css" rel="stylesheet" type="text/css" />      
  267.     <!-- Hoja de estilos que permite dar efectos a objetos html. -->
  268.     <link type="text/css" href="css/hoja_estilos_hover.css" rel="stylesheet" media="all"/>
  269.  
  270.     <!-- Fragmentos CSS. -->
  271.     <!-- Estilos css que aplico a la grilla. -->
  272.     <style>
  273.       .ui-jqgrid body, .ui-jqgrid .ui-jqgrid-pager, .ui-widget, .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button
  274.         {
  275.         font-size:16px; font-family:"Raleway";      
  276.         }
  277.       .ui-jqgrid {border:0px;}
  278.       .ui-jqgrid .ui-jqgrid-title {font-size:24px; font-family:"Raleway";padding: 3%; color:#76B837;}
  279.       .ui-jqgrid .ui-jqgrid-titlebar {padding: 1em 1em 1em 1em;}
  280.       .ui-jqgrid tr.jqgrow td {height: 25px; padding:5px 5px;}
  281.     </style>
  282.     <!-- Estilos css que aplico al div llamado "div_NOSCRIPT". -->
  283.     <style>        
  284.       .div_NOSCRIPT
  285.         {
  286.         font-family: Tahoma, sans-serif;
  287.         background-color: #FE9B40;
  288.         padding: 5px;
  289.         margin: 5px;        
  290.         }
  291.     </style>      
  292.  
  293.     <!-- Respond.js for IE8 support of media queries -->
  294.     <!--[if lt IE 9]>
  295.       <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  296.     <![endif]-->
  297.  
  298.     <!-- Inclusión de librerias Javascript. -->
  299.     <!-- Librería JQuery. -->    
  300.     <script src="js/jquery-2.1.0.js" type="text/javascript"></script>  
  301.     <!-- Librería requerida por el menú. -->
  302.     <script src="cssmenu/script.js" type="text/javascript"></script>
  303.     <!-- Las siguiente dos librerías están asociadas con la grilla. -->
  304.     <script src="lib/js/jqgrid/js/i18n/grid.locale-es.js" type="text/javascript"></script>
  305.     <script src="lib/js/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>      
  306.     <!-- Librería utilizada por JQueryUI. -->  
  307.     <script src="lib/js/themes/jquery-ui.custom.min.js" type="text/javascript"></script>
  308.    
  309.     <!-- Fragmentos Javascript. -->
  310.     <!-- Script que permite cambiar al español el idioma del control "DatePicker". -->
  311.     <script>
  312.       $.datepicker.regional['es'] =
  313.         {
  314.         closeText: 'Cerrar',
  315.         prevText: '<Ant',
  316.         nextText: 'Sig>',
  317.         currentText: 'Hoy',
  318.         monthNames: ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'],
  319.         monthNamesShort: ['Ene','Feb','Mar','Abr', 'May','Jun','Jul','Ago','Sep', 'Oct','Nov','Dic'],
  320.         dayNames: ['Domingo', 'Lunes', 'Martes', 'Mi&eacute;rcoles', 'Jueves', 'Viernes', 'S&aacute;bado'],
  321.         dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
  322.         dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
  323.         weekHeader: 'Sm',        
  324.         firstDay: 1,
  325.         isRTL: false,
  326.         showMonthAfterYear: false,
  327.         yearSuffix: ''
  328.         };
  329.       $.datepicker.setDefaults($.datepicker.regional['es']);
  330.       $(function ()
  331.         {
  332.         $("#fecha").datepicker();
  333.         });
  334.     </script>    
  335.  
  336.   </head>
  337.  
  338.   <body>    
  339.  
  340.     <!-- Aviso que se muestra en caso de que Javascript no este habilitado. -->
  341.     <noscript>
  342.    
  343.       <div class="div_NOSCRIPT">
  344.            
  345.             <p>
  346.                 Para que este web site funcione correctamente,
  347.                 es necesario habilitar javascript en tu navegador.
  348.             </p>
  349.             <p>
  350.                 <a href="http://www.enable-javascript.com/" target="_blank">
  351.                 En este enlace encontrarás instrucciones de
  352.                 cómo habilitar javascript en tu navegador</a>
  353.             </p>
  354.  
  355.       </div>
  356.      
  357.     </noscript>
  358.  
  359.     <!-- Cabecera de la página. -->
  360.     <div class="cabecera">
  361.  
  362.       <div class="contenedor_logo hvr-float-shadow">      
  363.  
  364.         <a class="logo" href="index.php">BUDATRAVEL - Gestión de Reservas</a>    
  365.  
  366.         <div class="version">Versión 1.0</div>    
  367.  
  368.       </div>      
  369.  
  370.       <div id="cssmenu" class="hvr-float-shadow">
  371.      
  372.         <ul>
  373.           <li> <a href='clientes.php'>Clientes</a> </li>
  374.           <li class='active'> <a href='grilla_destinos.php'>Destinos Turísticos</a> </li>
  375.           <li> <a href='grilla_proveedores.php'>Proveedores</a>  </li>
  376.           <li> <a href='usuarios.php'>Usuarios</a> </li>
  377.           <li> <a href='ayuda.php' target="_blank">Ayuda</a> </li>                          
  378.           <li> <a href='salir.php'>Salir</a> </li>
  379.         </ul>
  380.      
  381.       </div>
  382.  
  383.     </div>
  384.  
  385.     <!-- Cuerpo de la página. -->
  386.     <div class = "cuerpo">                        
  387.      
  388.       <!-- Muestro la grilla. -->  
  389.       <div>
  390.  
  391.         <?php echo $out?>    
  392.      
  393.       </div>
  394.  
  395.     </div>
  396.  
  397.     <!-- Pie de la página. -->      
  398.     <div class = "pie hvr-float-shadow">      
  399.    
  400.         <div  class = "nombre">
  401.  
  402.           <?php echo $u_nombre." (".$u_logon.") "; ?>
  403.  
  404.         </div>
  405.        
  406.         <div class = "fecha">
  407.        
  408.           <?php
  409.           $dias = array("Domingo","Lunes","Martes","Miercoles","Jueves","Viernes","Sábado");
  410.           $meses = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  411.           echo $dias[date('w')]." ".date('d')." de ".$meses[date('n')-1]. " del ".date('Y');
  412.           ?>
  413.        
  414.         </div>
  415.  
  416.     </div>
  417.  
  418.   </body>
  419.  
  420. <html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement