/** * 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, '_'); } }
/** * 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; }
/** * 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); }