/** * @param array $map * @param string $isRoot */ public function init(array $data = array()) { foreach ($data[0]['children'] as $c) { if ($c['name'] == 'detail') { $map = $c['children'][0]['children']; break; } } if (!isset($map)) { return; } if (($first = reset($map)) && !is_array($first) && !is_numeric(key($map))) { parent::init($map, false); return; } $propertiesMap = PPUtils::objectProperties($this); $arrayCtr = array(); foreach ($map as $element) { if (empty($element) || empty($element['name'])) { continue; } elseif (!array_key_exists($property = strtolower($element['name']), $propertiesMap)) { if (!preg_match('~^(.+)[\\[\\(](\\d+)[\\]\\)]$~', $property, $m)) { continue; } $element['name'] = $m[1]; $element['num'] = $m[2]; } $element['name'] = $propertiesMap[strtolower($element['name'])]; if (PPUtils::isPropertyArray($this, $element['name'])) { $arrayCtr[$element['name']] = isset($arrayCtr[$element['name']]) ? $arrayCtr[$element['name']] + 1 : 0; $element['num'] = $arrayCtr[$element['name']]; } if (!empty($element["attributes"]) && is_array($element["attributes"])) { foreach ($element["attributes"] as $key => $val) { $element["children"][] = array('name' => $key, 'text' => $val); } if (isset($element['text'])) { $element["children"][] = array('name' => 'value', 'text' => $element['text']); } $this->fillRelation($element['name'], $element); } elseif (!empty($element['text'])) { $this->{$element['name']} = $element['text']; } elseif (!empty($element["children"]) && is_array($element["children"])) { $this->fillRelation($element['name'], $element); } } }
/** * @test */ public function testGetProperties() { $o = new MockReflectionTestType(); $ret = PPUtils::objectProperties($o); //TODO: Check count $this->assertEquals(6, count($ret), "Not all properties have been read"); $this->assertEquals('fieldWithSpecialChar', $ret['fieldwith-specialchar']); }