PHP Classes

File: vendor/gabordemooij/redbean/RedBeanPHP/Util/QuickExport.php

Recommend this page to a friend!
  Classes of Adrian M   upMVC   vendor/gabordemooij/redbean/RedBeanPHP/Util/QuickExport.php   Download  
File: vendor/gabordemooij/redbean/RedBeanPHP/Util/QuickExport.php
Role: Class source
Content type: text/plain
Description: Class source
Class: upMVC
Pure PHP web development without other frameworks
Author: By
Last change:
Date: 1 month ago
Size: 3,947 bytes
 

Contents

Class file image Download
<?php

namespace RedBeanPHP\Util;

use
RedBeanPHP\OODB as OODB;
use
RedBeanPHP\OODBBean as OODBBean;
use
RedBeanPHP\ToolBox as ToolBox;

/**
 * Quick Export Utility
 *
 * The Quick Export Utility Class provides functionality to easily
 * expose the result of SQL queries as well-known formats like CSV.
 *
 * @file RedBeanPHP/Util/QuickExport.php
 * @author Gabor de Mooij and the RedBeanPHP Community
 * @license BSD/GPLv2
 *
 * @copyright
 * copyright (c) G.J.G.T. (Gabor) de Mooij and the RedBeanPHP Community
 * This source file is subject to the BSD/GPLv2 License that is bundled
 * with this source code in the file license.txt.
 */
class QuickExport
{
   
/**
     * @var ToolBox
     */
   
protected $toolbox;

   
/**
     * @var boolean
     */
   
private static $test = FALSE;

   
/**
     * Constructor.
     * The Quick Export requires a toolbox.
     *
     * @param ToolBox $toolbox
     */
   
public function __construct( ToolBox $toolbox )
    {
       
$this->toolbox = $toolbox;
    }

   
/**
     * Makes csv() testable.
     *
     * @param string $name
     * @param mixed $arg1
     * @param boolean $arg2
     *
     * @return mixed
      */
   
public static function operation( $name, $arg1, $arg2 = TRUE ) {
       
$out = '';
        switch(
$name ) {
            case
'test':
               
self::$test = (boolean) $arg1;
                break;
            case
'header':
               
$out = ( self::$test ) ? $arg1 : header( $arg1, $arg2 );
                break;
            case
'readfile':
               
$out = ( self::$test ) ? file_get_contents( $arg1 ) : readfile( $arg1 );
                break;
            case
'exit':
               
$out = ( self::$test ) ? 'exit' : exit();
                break;
        }
        return
$out;
    }

   
/**
     * Exposes the result of the specified SQL query as a CSV file.
     *
     * Usage:
     *
     * <code>
     * R::csv( 'SELECT
     * `name`,
     * population
     * FROM city
     * WHERE region = :region ',
     * array( ':region' => 'Denmark' ),
     * array( 'city', 'population' ),
     * '/tmp/cities.csv'
     * );
     * </code>
     *
     * The command above will select all cities in Denmark
     * and create a CSV with columns 'city' and 'population' and
     * populate the cells under these column headers with the
     * names of the cities and the population numbers respectively.
     *
     * @param string $sql SQL query to expose result of
     * @param array $bindings parameter bindings
     * @param array $columns column headers for CSV file
     * @param string $path path to save CSV file to
     * @param boolean $output TRUE to output CSV directly using readfile
     * @param array $options delimiter, quote and escape character respectively
     *
     * @return string|NULL
     */
   
public function csv( $sql = '', $bindings = array(), $columns = NULL, $path = '/tmp/redexport_%s.csv', $output = TRUE, $options = array(',','"','\\') )
    {
        list(
$delimiter, $enclosure, $escapeChar ) = $options;
       
$path = sprintf( $path, date('Ymd_his') );
       
$handle = fopen( $path, 'w' );
        if (
$columns) if (PHP_VERSION_ID>=505040) fputcsv($handle, $columns, $delimiter, $enclosure, $escapeChar ); else fputcsv($handle, $columns, $delimiter, $enclosure );
       
$cursor = $this->toolbox->getDatabaseAdapter()->getCursor( $sql, $bindings );
        while(
$row = $cursor->getNextItem() ) {
            if (
PHP_VERSION_ID>=505040) fputcsv($handle, $row, $delimiter, $enclosure, $escapeChar ); else fputcsv($handle, $row, $delimiter, $enclosure );
        }
       
fclose($handle);
        if (
$output ) {
           
$file = basename($path);
           
$out = self::operation('header',"Pragma: public");
           
$out .= self::operation('header',"Expires: 0");
           
$out .= self::operation('header',"Cache-Control: must-revalidate, post-check=0, pre-check=0");
           
$out .= self::operation('header',"Cache-Control: private", FALSE );
           
$out .= self::operation('header',"Content-Type: text/csv");
           
$out .= self::operation('header',"Content-Disposition: attachment; filename={$file}" );
           
$out .= self::operation('header',"Content-Transfer-Encoding: binary");
           
$out .= self::operation('readfile',$path );
            @
unlink( $path );
           
self::operation('exit', FALSE);
            return
$out;
        }
    }
}