<?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 [email protected] so we can send you a copy immediately. 
 * 
 * @package   Bvb_Grid 
 * @author    Bento Vilas Boas <[email protected]> 
 * @copyright 2010 ZFDatagrid 
 * @license   http://www.petala-azul.com/bsd.txt   New BSD License 
 * @version   $Id$ 
 * @link      http://zfdatagrid.com 
 */ 
class Bvb_Grid_Source_Xml extends Bvb_Grid_Source_Array { 
 
    public function __construct($url, $loop, $columns = null, $cache = null) 
    { 
 
        if ($cache) { 
            $this->setCache($cache); 
        } 
 
        $cache = $this->getCache(); 
 
        if (strstr($url, '<?xml')) { 
            $xml = simplexml_load_string($url); 
        } else { 
 
            if ($cache['enable'] == true) { 
                if (($xml = $cache['instance']->load(md5($url))) === false) { 
                    $xml = file_get_contents($url); 
                    $cache['instance']->save($xml, md5($url), array($this->_cache['tag'])); 
                } 
            } else { 
                $xml = simplexml_load_file($url); 
            } 
        } 
 
        $xml = $this->_object2array($xml); 
 
        $cols = explode(',', $loop); 
        if (is_array($cols)) { 
            foreach ($cols as $value) { 
                $xml = $xml[$value]; 
            } 
        } 
 
        //Remove possible arrays 
        for ($i = 0; $i < count($xml); $i++) { 
            foreach ($xml[$i] as $key => $final) { 
                if (!is_string($final)) { 
                    unset($xml[$i][$key]); 
                } 
            } 
        } 
 
        if (is_array($columns)) { 
            foreach ($columns as $value) { 
                $columns = $columns[$value]; 
            } 
        } else { 
            $columns = array_keys($xml[0]); 
        } 
 
        $this->_fields = $columns; 
        $this->_rawResult = $xml; 
        $this->_sourceName = 'xml'; 
 
        unset($columns); 
        unset($xml); 
    } 
 
}
 
 |