Generator.php in Commerce Braintree 7        
                          
                  
                        
  
  
  
  
File
  braintree_php/lib/Braintree/Xml/Generator.php
  
    View source  
  <?php
class Braintree_Xml_Generator {
  
  public static function arrayToXml($aData) {
    
    $writer = new XMLWriter();
    $writer
      ->openMemory();
    $writer
      ->setIndent(true);
    $writer
      ->setIndentString(' ');
    $writer
      ->startDocument('1.0', 'UTF-8');
    
    $aKeys = array_keys($aData);
    $rootElementName = $aKeys[0];
    
    $writer
      ->startElement(Braintree_Util::camelCaseToDelimiter($rootElementName));
    
    self::_createElementsFromArray($writer, $aData[$rootElementName], $rootElementName);
    
    $writer
      ->endElement();
    $writer
      ->endDocument();
    
    return $writer
      ->outputMemory();
  }
  
  private static function _createElementsFromArray(&$writer, $aData) {
    if (!is_array($aData)) {
      if (is_bool($aData)) {
        $writer
          ->text($aData ? 'true' : 'false');
      }
      else {
        $writer
          ->text($aData);
      }
      return;
    }
    foreach ($aData as $index => $element) {
      
      $elementName = Braintree_Util::camelCaseToDelimiter($index, '-');
      
      $writer
        ->startElement($elementName);
      if (is_array($element)) {
        if (array_key_exists(0, $element) || empty($element)) {
          $writer
            ->writeAttribute('type', 'array');
          foreach ($element as $ignored => $itemInArray) {
            $writer
              ->startElement('item');
            self::_createElementsFromArray($writer, $itemInArray);
            $writer
              ->endElement();
          }
        }
        else {
          self::_createElementsFromArray($writer, $element);
        }
      }
      else {
        
        $attribute = self::_generateXmlAttribute($element);
        if (is_array($attribute)) {
          $writer
            ->writeAttribute($attribute[0], $attribute[1]);
          $element = $attribute[2];
        }
        $writer
          ->text($element);
      }
      $writer
        ->endElement();
    }
  }
  
  private static function _generateXmlAttribute($value) {
    if ($value instanceof DateTime) {
      return array(
        'type',
        'datetime',
        self::_dateTimeToXmlTimestamp($value),
      );
    }
    if (is_int($value)) {
      return array(
        'type',
        'integer',
        $value,
      );
    }
    if (is_bool($value)) {
      return array(
        'type',
        'boolean',
        $value ? 'true' : 'false',
      );
    }
    if ($value === NULL) {
      return array(
        'nil',
        'true',
        $value,
      );
    }
  }
  
  private static function _dateTimeToXmlTimestamp($dateTime) {
    $dateTime
      ->setTimeZone(new DateTimeZone('UTC'));
    return $dateTime
      ->format('Y-m-d\\TH:i:s') . 'Z';
  }
  private static function _castDateTime($string) {
    try {
      if (empty($string)) {
        return false;
      }
      $dateTime = new DateTime($string);
      return self::_dateTimeToXmlTimestamp($dateTime);
    } catch (Exception $e) {
      
      return false;
    }
  }
}