protected function getDetailGroups(KurogoDataObject $object, $configName) { $detailFields = Kurogo::getModuleSections($configName, $this->configModule); $groups = array(); foreach ($detailFields as $key => $keyData) { $group = Kurogo::arrayVal($keyData, 'group', 0); $grouptype = Kurogo::arrayVal($keyData, 'grouptype', 'navlist'); //get the object we're using for this field $keyObject = $this->getObject($object, $keyData); if ($listType = Kurogo::arrayVal($keyData, 'list-type')) { $groupObjects = $this->getObjectField($keyObject, $key); if (!is_array($groupObjects)) { throw new KurogoException("Result of " . get_class($keyObject) . " {$key} did not return an array"); } foreach ($groupObjects as $objectKey => $groupObject) { $_groups = $this->getDetailGroups($groupObject, 'list-' . $listType); foreach ($_groups as $_groupKey => $_groupData) { $groupObjectKey = $objectKey . '-' . $_groupKey; $groupOptions = array('object' => $groupObject, 'group' => $groupObjectKey, 'groupkey' => $_groupKey); $groups[$groupObjectKey] = array_merge($groupOptions, $_groupData); } } break; } else { if (!isset($groups[$group])) { $groups[$group] = array(); } if (isset($keyData['groupheading'])) { $groups[$group]['groupheading'] = $keyData['groupheading']; unset($keyData['groupheading']); } elseif (isset($keyData['groupheadingfield'])) { $groups[$group]['groupheading'] = $this->getObjectField($keyObject, $keyData['groupheadingfield']); unset($keyData['groupheadingfield']); } if (isset($keyData['groupsubheading'])) { $groups[$group]['groupsubheading'] = $keyData['groupsubheading']; unset($keyData['groupsubheading']); } elseif (isset($keyData['groupsubheadingfield'])) { $groups[$group]['groupsubheading'] = $this->getObjectField($keyObject, $keyData['groupsubheadingfield']); unset($keyData['groupsubheadingfield']); } if (isset($keyData['subTitleNewline'])) { $groups[$group]['subTitleNewline'] = $keyData['subTitleNewline']; unset($keyData['subTitleNewline']); } switch ($grouptype) { case 'html': $groups[$group] = array_merge($groups[$group], $keyData); $groups[$group]['html'] = $this->getObjectField($keyObject, $key); $groups[$group]['type'] = $grouptype; $groups[$group]['field'] = $key; break; case 'navlist': case 'list': $groups[$group]['type'] = $grouptype; $groups[$group]['fields'][$key] = $keyData; break; default: throw new KurogoConfigurationException("Invalid grouptype {$grouptype} for {$key}"); } } } return $groups; }