private function createGroupTabs(ContentType $contentType, array $has)
{
$groups = [];
$groupIds = [];
$addGroup = function ($group, $label) use(&$groups, &$groupIds) {
$nr = count($groups) + 1;
$id = rtrim('tab-' . Slugify::create()->slugify($group), '-');
if (isset($groupIds[$id]) || $id === 'tab') {
$id .= '-' . $nr;
}
$groups[$group] = ['label' => $label, 'id' => $id, 'is_active' => $nr === 1, 'fields' => []];
$groupIds[$id] = 1;
};
foreach ($contentType['groups'] ? $contentType['groups'] : ['ungrouped'] as $group) {
if ($group === 'ungrouped') {
$addGroup($group, Trans::__('contenttypes.generic.group.ungrouped'));
} elseif ($group !== 'meta' && $group !== 'relations' && $group !== 'taxonomy') {
$default = ['DEFAULT' => ucfirst($group)];
$key = ['contenttypes', $contentType['slug'], 'group', $group];
$addGroup($group, Trans::__($key, $default));
}
}
if ($has['relations'] || $has['incoming_relations']) {
$addGroup('relations', Trans::__('contenttypes.generic.group.relations'));
$groups['relations']['fields'][] = '*relations';
}
if ($has['taxonomy'] || is_array($contentType['groups']) && in_array('taxonomy', $contentType['groups'])) {
$addGroup('taxonomy', Trans::__('contenttypes.generic.group.taxonomy'));
$groups['taxonomy']['fields'][] = '*taxonomy';
}
if ($has['templatefields'] || is_array($contentType['groups']) && in_array('template', $contentType['groups'])) {
$addGroup('template', Trans::__('contenttypes.generic.group.template'));
$groups['template']['fields'][] = '*template';
}
$addGroup('meta', Trans::__('contenttypes.generic.group.meta'));
$groups['meta']['fields'][] = '*meta';
// References fields in tab group data.
foreach ($contentType['fields'] as $fieldName => $field) {
$groups[$field['group']]['fields'][] = $fieldName;
}
return $groups;
}