<?php 
namespace Jackbooted\Util; 
 
use \Jackbooted\DB\DB; 
use \Jackbooted\DB\DBTable; 
/** 
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved. 
 * 
 * Written by Brett Dutton of Jackbooted Software 
 * brett at brettdutton dot com 
 * 
 * This software is written and distributed under the GNU General Public 
 * License which means that its source code is freely-distributed and 
 * available to the general public. 
 * 
 */ 
 
class CSV extends \Jackbooted\Util\JB { 
    public static function output ( $table, $name='' ) { 
        if ( ! is_object ( $table ) && ! is_array ( $table ) ) exit; 
        if ( $name == '' ) $name = 'output' . Invocation::next(); 
        if ( ! preg_match ( '/^.*\.csv$/i', $name ) ) $name .= '.csv'; 
 
        header ( 'Content-type: application/octet-stream' ); 
        header ( 'Content-Disposition: attachment; filename="' . $name . '"' ); 
        $firstRow = true; 
 
        if ( $table instanceof DBTable || is_array( $table ) ) { 
            foreach ( $table as $row ) { 
                // Output the headers 
                if ( $firstRow ) echo join ( ',', array_keys ( $row ) ), "\n"; 
                $firstRow = false; 
 
                // Output the data 
                $firstValue = true; 
                foreach ( $row as $key => $val ) { 
                    if ( ! $firstValue ) echo ','; 
                    $firstValue = false; 
                    echo '"' . addcslashes ( $val, '"' ) . '"'; 
                } 
                echo "\n"; 
            } 
        } 
        else if ( $table instanceof \PDOStatement ) { 
            while ( $row = $table->fetch ( DB::FETCH_ASSOC ) ) { 
                if ( $firstRow ) echo join ( ',', array_keys ( $row ) ), "\n"; 
                $firstRow = false; 
 
                // Output the data 
                $firstValue = true; 
                foreach ( $row as $key => $val ) { 
                    if ( ! $firstValue ) echo ','; 
                    $firstValue = false; 
                    echo '"' . addcslashes ( $val, '"' ) . '"'; 
                } 
                echo "\n"; 
            } 
        } 
        exit; 
    } 
}
 
 |