/**
  * initializes instance properties from the keys/values of an array
  * @ignore
  * @access protected
  * @param array $attributes array of properties to set - single level
  * @return none
  */
 private function _initializeFromArray($attributes)
 {
     foreach ($attributes as $name => $value) {
         $varName = "_{$name}";
         $this->{$varName} = Braintree_Util::delimiterToCamelCase($value, '_');
     }
 }
예제 #2
0
 /**
  * processes SimpleXMLIterator objects recursively
  *
  * @access protected
  * @param object $iterator
  * @return array xml converted to array
  */
 private static function _iteratorToArray($iterator)
 {
     $xmlArray = array();
     $value = null;
     // rewind the iterator and check if the position is valid
     // if not, return the string it contains
     $iterator->rewind();
     if (!$iterator->valid()) {
         return self::_typecastXmlValue($iterator);
     }
     for ($iterator->rewind(); $iterator->valid(); $iterator->next()) {
         $tmpArray = null;
         $value = null;
         // get the attribute type string for use in conditions below
         $attributeType = $iterator->attributes()->type;
         // extract the parent element via xpath query
         $parentElement = $iterator->xpath($iterator->key() . '/..');
         if ($parentElement[0] instanceof SimpleXMLIterator) {
             $parentElement = $parentElement[0];
             $parentKey = Braintree_Util::delimiterToCamelCase($parentElement->getName());
         } else {
             $parentElement = null;
         }
         if ($parentKey == "customFields") {
             $key = Braintree_Util::delimiterToUnderscore($iterator->key());
         } else {
             $key = Braintree_Util::delimiterToCamelCase($iterator->key());
         }
         // process children recursively
         if ($iterator->hasChildren()) {
             // return the child elements
             $value = self::_iteratorToArray($iterator->current());
             // if the element is an array type,
             // use numeric keys to allow multiple values
             if ($attributeType != 'array') {
                 $tmpArray[$key] = $value;
             }
         } else {
             // cast values according to attributes
             $tmpArray[$key] = self::_typecastXmlValue($iterator->current());
         }
         // set the output string
         $output = isset($value) ? $value : $tmpArray[$key];
         // determine if there are multiple tags of this name at the same level
         if (isset($parentElement) && $parentElement->attributes()->type == 'collection' && $iterator->hasChildren()) {
             $xmlArray[$key][] = $output;
             continue;
         }
         // if the element was an array type, output to a numbered key
         // otherwise, use the element name
         if ($attributeType == 'array') {
             $xmlArray[] = $output;
         } else {
             $xmlArray[$key] = $output;
         }
     }
     return $xmlArray;
 }
 private static function _underscoreCustomField($groupByCustomField, $records)
 {
     $updatedRecords = array();
     foreach ($records as $record) {
         $camelized = Braintree_Util::delimiterToCamelCase($groupByCustomField);
         $record[$groupByCustomField] = $record[$camelized];
         unset($record[$camelized]);
         $updatedRecords[] = $record;
     }
     return $updatedRecords;
 }
예제 #4
0
 /**
  * return original value for a field
  * For example, if a user tried to submit 'invalid-email' in the html field transaction[customer][email],
  * $result->valueForHtmlField("transaction[customer][email]") would yield "invalid-email"
  *
  * @param string $field
  * @return string
  */
 public function valueForHtmlField($field)
 {
     $pieces = preg_split("/[\\[\\]]+/", $field, 0, PREG_SPLIT_NO_EMPTY);
     $params = $this->params;
     foreach (array_slice($pieces, 0, -1) as $key) {
         $params = $params[Braintree_Util::delimiterToCamelCase($key)];
     }
     $finalKey = Braintree_Util::delimiterToCamelCase(end($pieces));
     $fieldValue = isset($params[$finalKey]) ? $params[$finalKey] : null;
     return $fieldValue;
 }
 /**
  * return errors for the passed html field.
  * For example, $result->errors->onHtmlField("transaction[customer][last_name]")
  *
  * @param string $field
  * @return array
  */
 public function onHtmlField($field)
 {
     $pieces = preg_split("/[\\[\\]]+/", $field, 0, PREG_SPLIT_NO_EMPTY);
     $errors = $this;
     foreach (array_slice($pieces, 0, -1) as $key) {
         $errors = $errors->forKey(Braintree_Util::delimiterToCamelCase($key));
         if (!isset($errors)) {
             return array();
         }
     }
     $finalKey = Braintree_Util::delimiterToCamelCase(end($pieces));
     return $errors->onAttribute($finalKey);
 }