FluentDOM
[ class tree: FluentDOM ] [ index: FluentDOM ] [ all elements ]

Source for file PDO.php

Documentation is available at PDO.php

  1. <?php
  2. /**
  3. * Load FluentDOM from pdo result
  4. *
  5. @version $Id: PDO.php 431 2010-03-29 20:42:04Z subjective $
  6. @license http://www.opensource.org/licenses/mit-license.php The MIT License
  7. @copyright Copyright (c) 2009 Bastian Feder, Thomas Weinert
  8. *
  9. @package FluentDOM
  10. @subpackage Loaders
  11. */
  12.  
  13. /**
  14. * include interface
  15. */
  16. require_once(dirname(__FILE__).'/../Loader.php');
  17.  
  18. /**
  19. * Load FluentDOM from pdo result
  20. *
  21. @package FluentDOM
  22. @subpackage Loaders
  23. */
  24. class FluentDOMLoaderPDO implements FluentDOMLoader {
  25.  
  26.   /**
  27.   * Element type value
  28.   * @var integer 
  29.   */
  30.   const ELEMENT_VALUE 1;
  31.   /**
  32.   * Element type attribute
  33.   * @var integer 
  34.   */
  35.   const ATTRIBUTE_VALUE 2;
  36.  
  37.   /**
  38.   * root element name
  39.   * @var string 
  40.   */
  41.   protected $_tagNameRoot = 'records';
  42.   /**
  43.   * record element name
  44.   * @var unknown_type 
  45.   */
  46.   protected $_tagNameRecord = 'record';
  47.  
  48.   /**
  49.   * set root and record tag name for xml elements.
  50.   *
  51.   * @param string $root 
  52.   * @param string $record 
  53.   */
  54.   public function setTagNames($root$record{
  55.     $this->_tagNameRoot = $root;
  56.     $this->_tagNameRecord = $record;
  57.   }
  58.  
  59.   /**
  60.   * Load DOMDocument from xml string
  61.   *
  62.   * @param string $source xml string
  63.   * @param string $contentType 
  64.   * @return DOMDocument|FALSE
  65.   */
  66.   public function load($source$contentType{
  67.     if (is_object($source&&
  68.         $source instanceof PDOStatement{
  69.       $source->setFetchMode(PDO::FETCH_NUM);
  70.       $columnCount $source->columnCount();
  71.       $columns array();
  72.       for ($i 0$i $columnCount$i++{
  73.         $columnData $source->getColumnMeta($i);
  74.         $columns[$iarray(
  75.           'name' => $this->_normalizeColumnName($columnData['name']),
  76.           'type' => $this->_getNodeType($columnData)
  77.         );
  78.       }
  79.       $dom new DOMDocument();
  80.       $dom->formatOutput TRUE;
  81.       $dom->appendChild(
  82.         $rootNode $dom->createElement($this->_tagNameRoot)
  83.       );
  84.       foreach ($source as $row{
  85.         $rootNode->appendChild(
  86.           $recordNode $dom->createElement($this->_tagNameRecord)
  87.         );
  88.         foreach ($row as $columnId => $value{
  89.           switch ($columns[$columnId]['type']{
  90.           case self::ATTRIBUTE_VALUE :
  91.             $recordNode->setAttribute(
  92.               $columns[$columnId]['name'],
  93.               $value
  94.             );
  95.             break;
  96.           default :
  97.             $recordNode->appendChild(
  98.               $valueNode $dom->createElement(
  99.                 $columns[$columnId]['name'],
  100.                 $value
  101.               )
  102.             );
  103.             break;
  104.           }
  105.         }
  106.       }
  107.       return $dom;
  108.     }
  109.     return FALSE;
  110.   }
  111.  
  112.   /**
  113.   * normalize column for tag name use
  114.   *
  115.   * @param string $name 
  116.   */
  117.   protected function _normalizeColumnName($name{
  118.     return preg_replace('([:|+~\s]+)''-'$name);
  119.   }
  120.  
  121.   /**
  122.   * get node type (attribute or element)
  123.   *
  124.   * @param array $columnData 
  125.   */
  126.   protected function _getNodeType($columnData{
  127.     if ($columnData['native_type'== 'string'{
  128.       return self::ELEMENT_VALUE;
  129.     else {
  130.       return self::ATTRIBUTE_VALUE;
  131.     }
  132.   }
  133. }
  134.  
  135. ?>

Documentation generated on Tue, 07 Sep 2010 01:00:56 +0200 by phpDocumentor 1.4.3