<?php 
 
/*
 
  V4.93 10 Oct 2006  (c) 2000-2011 John Lim (jlim#natsoft.com). All rights reserved.
 
  Released under both BSD license and Lesser GPL library license. 
 
  Whenever there is any discrepancy between the two licenses, 
 
  the BSD license will take precedence.
 
  
 
  Some pretty-printing by Chris Oxenreider <[email protected]>
 
*/ 
 
 
// specific code for tohtml
 
GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND;
 
 
$ADODB_ROUND=4; // rounding
 
$gSQLMaxRows = 1000; // max no of rows to download
 
$gSQLBlockRows=20; // max no of rows per table block
 
 
// RecordSet to HTML Table
 
//------------------------------------------------------------
 
// Convert a recordset to a html table. Multiple tables are generated
 
// if the number of rows is > $gSQLBlockRows. This is because
 
// web browsers normally require the whole table to be downloaded
 
// before it can be rendered, so we break the output into several
 
// smaller faster rendering tables.
 
//
 
// $rs: the recordset
 
// $ztabhtml: the table tag attributes (optional)
 
// $zheaderarray: contains the replacement strings for the headers (optional)
 
//
 
//  USAGE:
 
//    include('adodb.inc.php');
 
//    $db = ADONewConnection('mysql');
 
//    $db->Connect('mysql','userid','password','database');
 
//    $rs = $db->Execute('select col1,col2,col3 from table');
 
//    rs2html($rs, 'BORDER=2', array('Title1', 'Title2', 'Title3'));
 
//    $rs->Close();
 
//
 
// RETURNS: number of rows displayed
 
 
function rs2html(&$rs,$ztabhtml=false,$zheaderarray=false,$htmlspecialchars=true, $echo = true, $excepcions, $request, $sustitution, $direccion)
 
{
 
 
#* Agregamos variable almacenadora
 
$s =''; $rows=0; $docnt = false; $reg = "?"; $szof = sizeof($request); $primary = array();
 
GLOBAL $gSQLMaxRows,$gSQLBlockRows,$ADODB_ROUND;
 
    
 
    if (!$rs) {
 
        printf(ADODB_BAD_RS,'rs2html');
 
        return false;
 
    }
 
 
    if (! $ztabhtml) $ztabhtml = "BORDER='0' WIDTH='98%'";
 
    //else $docnt = true;
 
    $typearr = array();
 
    $ncols = $rs->FieldCount();
 
    $hdr = "<TABLE COLS=$ncols $ztabhtml><tr>\n\n";
 
    for ($i=0; $i < $ncols; $i++) {    
 
        
 
        #* ITP 08-02-12    Armamos la palabra clave para filtrar por columna
 
        $field             = $rs->FetchField($i);
 
        $Filter_field    = $field->name;
 
 
        if ($field) {
 
            if ($zheaderarray) $fname = $zheaderarray[$i];
 
            else $fname = htmlspecialchars($field->name);    
 
            $typearr[$i] = $rs->MetaType($field->type,$field->max_length);
 
             //print " $field->name $field->type $typearr[$i] ";
 
        } else {
 
            $fname = 'Field '.($i+1);
 
            $typearr[$i] = 'C';
 
        }
 
        if (strlen($fname)==0) $fname = ' ';
 
        
 
        #* ITP 11-11-11    Aqui comenzamos el bisne de sustituir el alias por el encabezado de los campos                
 
                
 
        if(isset($sustitution["texto"][$fname])){
 
            $fname    = $sustitution["texto"][$fname];
 
        } else {
 
            $fname    = $fname;    
 
        }
 
        
 
        #* ITP 08-02-12    Agregamos filtro por encabezado
 
        /*
 
            <a href="<?php echo $_SERVER['PHP_SELF']; ?>?ordenar_campo=<?php echo $alias[$campo]; ?>" class="an">
 
                <b><?php echo $Session["cotizaciones"]["sustituciones"]["texto"][$campo]; ?></b>
 
            </a>
 
            
 
            $hdr .= "<TH>$fname</TH>";
 
        */
 
        #* Imprimimos la informacion
 
        $hdr    .= "<TH><a href=\"?pstAccion=Listar&direccion=".$direccion."&ordenar_campo=".$Filter_field."\">".$fname."</a></TH>";
 
        //$hdr .= "<TH>$fname</TH>";
 
    }
 
    // encabezado th
 
    $hdr .= "<th> </th>\n\n";
 
    
 
    $hdr .= "\n</tr>";
 
    if ($echo) print $hdr."\n\n";
 
    else $html = $hdr;
 
    
 
    // smart algorithm - handles ADODB_FETCH_MODE's correctly by probing...
 
    $numoffset = isset($rs->fields[0]) ||isset($rs->fields[1]) || isset($rs->fields[2]);
 
 
    while (!$rs->EOF) {
 
        #* ITP 18-11-11 Intercalado de colores
 
        $color = ((isset($color)) && ($color == '#E7EDDD')) ? '#FFFFFF' : '#E7EDDD';
 
        $s .= "<TR valign=\"top\" bgcolor=\"{$color}\" >\n";
 
                
 
        for ($i=0; $i < $ncols; $i++) {
 
            
 
            #* ITP 11-11-11    Funcion que permite registrar informacion dentro de nuestro campo
 
            $Campo    =  $rs->_fieldobjects[$i]->name;
 
            
 
            if ($i===0) $v=($numoffset) ? $rs->fields[0] : reset($rs->fields);
 
            else $v = ($numoffset) ? $rs->fields[$i] : next($rs->fields);
 
            
 
            $type = $typearr[$i];
 
            
 
            switch($type) {
 
                case 'D':
 
                    if (empty($v)) $s .= "<TD>   </TD>\n";
 
                    else if (!strpos($v,':')) {
 
                        $s .= "    <TD>".$rs->UserDate($v,"D d, M Y") ." </TD>\n";
 
                    }
 
                    break;
 
                case 'T':
 
                    if (empty($v)) $s .= "<TD>   </TD>\n";
 
                    else $s .= "    <TD>".$rs->UserTimeStamp($v,"D d, M Y, h:i:s") ." </TD>\n";
 
                break;
 
                
 
                case 'N':
 
                    if (abs($v) - round($v,0) < 0.00000001)
 
                        $v = round($v);
 
                    else
 
                        $v = round($v,$ADODB_ROUND);
 
                case 'I':
 
                    #* Function con argumentos 1
 
                    if(isset($sustitution["funcion"][$Campo])){
 
                        $v = call_user_func($sustitution["funcion"][$Campo], $v);
 
                    } else {
 
                        $v    = $v;    
 
                    }
 
                    $s .= "    <TD align=right>".stripslashes((trim($v))) ." </TD>\n";
 
                    
 
                break;
 
                /*
 
                case 'B':
 
                    if (substr($v,8,2)=="BM" ) $v = substr($v,8);
 
                    $mtime = substr(str_replace(' ','_',microtime()),2);
 
                    $tmpname = "tmp/".uniqid($mtime).getmypid();
 
                    $fd = @fopen($tmpname,'a');
 
                    @ftruncate($fd,0);
 
                    @fwrite($fd,$v);
 
                    @fclose($fd);
 
                    if (!function_exists ("mime_content_type")) {
 
                      function mime_content_type ($file) {
 
                        return exec("file -bi ".escapeshellarg($file));
 
                      }
 
                    }
 
                    $t = mime_content_type($tmpname);
 
                    $s .= (substr($t,0,5)=="image") ? " <td><img src='$tmpname' alt='$t'></td>\\n" : " <td><a
 
                    href='$tmpname'>$t</a></td>\\n";
 
                    break;
 
                */
 
 
                default:
 
                    if ($htmlspecialchars) //$v = htmlspecialchars(trim($v));
 
                    $v = trim($v);
 
                    if (strlen($v) == 0) $v = ' ';
 
                    $v    = str_replace("\n",'<br>',stripslashes($v));
 
    
 
                    #* ITP 11-11-11    Funcion que permite registrar informacion dentro de nuestro campo
 
                    #* ITP 21-12-11 Comentada, no es necesario hacer este paso
 
                    //$Campo    =  $rs->FetchField($i);
 
                    /*
 
                        Esta funcion se recomienda utilizar solo para campos tipo texto, ya que:
 
                            -    date
 
                            -    numeric
 
                            -    integer
 
                            -    time
 
                        Manejan una manipulacion diferente.
 
                    */
 
                        
 
                    #* Function con argumentos 1
 
                    if(isset($sustitution["funcion"][$Campo])){
 
                        $v = call_user_func($sustitution["funcion"][$Campo], $Campo);
 
                    } else {
 
                        $v    = $v;    
 
                    }
 
                    
 
                    $s .= sprintf("    <TD>%s</TD>\n", $v);
 
                  
 
            }
 
            
 
            
 
        } // for
 
        
 
        #* ITP 20-03-11 Verificar si viene con parametros
 
        if(strpos($excepcions, "?") > -1){
 
            $reg = NULL;
 
        }
 
        #* ITP 01-11-11    Aqui metemos los parametros del request.
 
        foreach($request as $campo => $valor){
 
            
 
            #* Si encontramos el indice, entonces armamos el parametro GET
 
            for($k = 0 ; $k < sizeof($request); $k++){
 
            
 
                #* Buscamos el parametro
 
                if(!in_array($valor, $primary)){
 
                    
 
                    array_push($primary, $valor);
 
                    
 
                    #* Buscamos el parametro
 
                    if($rs->_fieldobjects[$k]->name == $valor){
 
                        
 
                        $reg.= (--$szof > 0 && strpos($excepcions, "?") > -1) ? $campo."=".$rs->fields[$valor]."&" : "&".$campo."=".$rs->fields[$valor];
 
                    }
 
                    $primary = array();
 
                }
 
            }
 
            
 
        }
 
        
 
        $s .= str_replace('%s', $reg, "<td>{$excepcions}</td>\n\n");
 
        $s .= "</TR>\n\n";
 
        
 
        $reg = '?';      
 
        $rows += 1;
 
        if ($rows >= $gSQLMaxRows) {
 
            $rows = "<p>Truncated at $gSQLMaxRows</p>";
 
            break;
 
        } // switch
 
 
        $rs->MoveNext();
 
    
 
    // additional EOF check to prevent a widow header
 
        if (!$rs->EOF && $rows % $gSQLBlockRows == 0) {
 
    
 
        //if (connection_aborted()) break;// not needed as PHP aborts script, unlike ASP
 
            if ($echo) print $s . "</TABLE>\n\n";
 
            else $html .= $s ."</TABLE>\n\n";
 
            $s = $hdr;
 
        }
 
    } // while
 
 
    if ($echo) print $s."</TABLE>\n\n";
 
    else $html .= $s."</TABLE>\n\n";
 
    
 
    if ($docnt) if ($echo) print "<H2>".$rows." Rows</H2>";
 
    
 
    return ($echo) ? $rows : $html;
 
 }
 
 
 
// pass in 2 dimensional array
 
function arr2html(&$arr,$ztabhtml='',$zheaderarray='')
 
{
 
    if (!$ztabhtml) $ztabhtml = 'BORDER=1';
 
    
 
    $s = "<TABLE $ztabhtml>";//';print_r($arr);
 
 
    if ($zheaderarray) {
 
        $s .= '<TR>';
 
        for ($i=0; $i<sizeof($zheaderarray); $i++) {
 
            $s .= "    <TH>{$zheaderarray[$i]}</TH>\n";
 
        }
 
        $s .= "\n</TR>";
 
    }
 
    
 
    for ($i=0; $i<sizeof($arr); $i++) {
 
        $s .= '<TR>';
 
        $a = $arr[$i];
 
        if (is_array($a)) 
 
            for ($j=0; $j<sizeof($a); $j++) {
 
                $val = $a[$j];
 
                if (empty($val)) $val = ' ';
 
                $s .= "    <TD>$val</TD>\n";
 
            }
 
        else if ($a) {
 
            $s .=  '    <TD>'.$a."</TD>\n";
 
        } else $s .= "    <TD> </TD>\n";
 
        $s .= "\n</TR>\n";
 
    }
 
    $s .= '</TABLE>';
 
    print $s;
 
}
 
 
?>
 
 |