PHP Classes

File: Bvb/Grid/Deploy/Excel.php

Recommend this page to a friend!
  Classes of Filipe Sá   Zend Framework Data Grid   Bvb/Grid/Deploy/Excel.php   Download  
File: Bvb/Grid/Deploy/Excel.php
Role: Class source
Content type: text/plain
Description: Deploy the results to a MS Excel FIle
Class: Zend Framework Data Grid
Display and edit data from a database in a grid
Author: By
Last change: Verion 0.6
Date: 14 years ago
Size: 4,449 bytes
 

Contents

Class file image Download
<?php

/**
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license
 * It is available through the world-wide-web at this URL:
 * http://www.petala-azul.com/bsd.txt
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to geral@petala-azul.com so we can send you a copy immediately.
 *
 * @package Bvb_Grid
 * @copyright Copyright (c) (http://www.petala-azul.com)
 * @license http://www.petala-azul.com/bsd.txt New BSD License
 * @version $Id: Excel.php 978 2010-03-15 22:22:18Z bento.vilas.boas@gmail.com $
 * @author Bento Vilas Boas <geral@petala-azul.com >
 */

class Bvb_Grid_Deploy_Excel extends Bvb_Grid implements Bvb_Grid_Deploy_Interface {

    const
OUTPUT = 'excel';

    public
$deploy = array ();

    function
__construct($options) {

        if (!
in_array ( self::OUTPUT, $this->_export )) {
            echo
$this->__ ( "You dont' have permission to export the results to this format" );
            die ();
        }

       
$this->_setRemoveHiddenFields(true);
       
parent::__construct ($options);
    }


    function
deploy() {

       
$this->setPagination ( 0 );

       
parent::deploy ();

        if(!isset(
$this->options['title']))
        {
           
$this->options['title'] = 'ZFDatagrid';
        }

       
$titles = parent::_buildTitles ();
       
$wsData = parent::_buildGrid ();
       
$sql = parent::_buildSqlExp ();

       
$xml = '<?xml version="1.0"?><?mso-application progid="Excel.Sheet"?>
<Workbook xmlns:x="urn:schemas-microsoft-com:office:excel"
  xmlns="urn:schemas-microsoft-com:office:spreadsheet"
  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">'
;

       
$xml .= '<Worksheet ss:Name="' . $this->options['title'] . '" ss:Description="' . $this->options['title'] . '"><ss:Table>';

       
$xml .= '<ss:Row>';
        foreach (
$titles as $value ) {

           
$type = ! is_numeric ($value ['value'] ) ? 'String' : 'Number';

           
$xml .= '<ss:Cell><Data ss:Type="' . $type . '">' . $value ['value'] . '</Data></ss:Cell>';
        }
       
$xml .= '</ss:Row>';

        if (
is_array ( $wsData )) {
            foreach (
$wsData as $row ) {

               
$xml .= '<ss:Row>';
               
$a = 1;
                foreach (
$row as $value ) {

                   
$value ['value'] = strip_tags ( $value ['value'] );

                   
$type = ! is_numeric ( $value ['value'] ) ? 'String' : 'Number';
                   
$xml .= '<ss:Cell><Data ss:Type="' . $type . '">' . $value ['value'] . '</Data></ss:Cell>';

                   
$a ++;
                }
               
$xml .= '</ss:Row>';
            }

        }

        if (
is_array ( $sql )) {
           
$xml .= '<ss:Row>';
            foreach (
$sql as $value ) {

               
$type = ! is_numeric ( $value ['value'] ) ? 'String' : 'Number';

               
$xml .= '<ss:Cell><Data ss:Type="' . $type . '">' . $value ['value'] . '</Data></ss:Cell>';
            }
           
$xml .= '</ss:Row>';
        }

       
$xml .= '</ss:Table></Worksheet>';

       
$xml .= '</Workbook>';


        if (! isset(
$this->deploy['save'])) {
           
$this->deploy['save'] = false;
        }

        if (! isset(
$this->deploy['download'])) {
           
$this->deploy['download'] = false;
        }

        if (
$this->deploy['save'] != 1 && $this->deploy['download'] != 1) {
            throw new
Exception('Nothing to do. Please specify download&&|save options');
        }


        if (empty(
$this->deploy['name'])) {
           
$this->deploy['name'] = date('H_m_d_H_i_s');
        }

        if (
substr($this->deploy['name'], - 4) == '.xls') {
           
$this->deploy['name'] = substr($this->deploy['name'], 0, - 4);
        }

       
$this->deploy['dir'] = rtrim($this->deploy['dir'], '/') . '/';

        if (!
is_dir($this->deploy['dir'])) {
            throw new
Bvb_Grid_Exception($this->deploy['dir'] . ' is not a dir');
        }

        if (!
is_writable($this->deploy['dir'])) {
            throw new
Bvb_Grid_Exception($this->deploy['dir'] . ' is not writable');
        }

       
file_put_contents($this->deploy['dir'] . $this->deploy['name'] . ".xls", $xml);


        if (
$this->deploy['download'] == 1) {
           
header ( 'Content-type: application/excel' );
           
header('Content-Disposition: attachment; filename="' . $this->deploy['name'] . '.xls"');
           
readfile($this->deploy['dir'] . $this->deploy['name'] . '.xls');
        }

        if (
$this->deploy['save'] != 1) {
           
unlink($this->deploy['dir'] . $this->deploy['name'] . '.xls');
        }


        die ();

    }

}