public function prepSettings($settings)
{
if ($settings instanceof Neo_SettingsModel) {
return $settings;
}
$neoSettings = new Neo_SettingsModel();
$neoSettings->setField($this->model);
$blockTypes = [];
$groups = [];
if (!empty($settings['blockTypes'])) {
foreach ($settings['blockTypes'] as $blockTypeId => $blockTypeSettings) {
$blockType = new Neo_BlockTypeModel();
$blockType->id = $blockTypeId;
$blockType->fieldId = $this->model->id;
$blockType->name = $blockTypeSettings['name'];
$blockType->handle = $blockTypeSettings['handle'];
$blockType->maxBlocks = $blockTypeSettings['maxBlocks'];
$blockType->sortOrder = $blockTypeSettings['sortOrder'];
$blockType->childBlocks = $blockTypeSettings['childBlocks'];
$blockType->topLevel = (bool) $blockTypeSettings['topLevel'];
if (!empty($blockTypeSettings['fieldLayout'])) {
$fieldLayoutPost = $blockTypeSettings['fieldLayout'];
$requiredFieldPost = empty($blockTypeSettings['requiredFields']) ? [] : $blockTypeSettings['requiredFields'];
// Add support for blank tabs
foreach ($fieldLayoutPost as $tabName => $fieldIds) {
if (!is_array($fieldIds)) {
$fieldLayoutPost[$tabName] = [];
}
}
$fieldLayout = craft()->fields->assembleLayout($fieldLayoutPost, $requiredFieldPost);
$fieldLayout->type = Neo_ElementType::NeoBlock;
$blockType->setFieldLayout($fieldLayout);
}
$blockTypes[] = $blockType;
}
}
if (!empty($settings['groups'])) {
$names = $settings['groups']['name'];
$sortOrders = $settings['groups']['sortOrder'];
for ($i = 0; $i < count($names); $i++) {
$group = new Neo_GroupModel();
$group->name = $names[$i];
$group->sortOrder = $sortOrders[$i];
$groups[] = $group;
}
}
$neoSettings->setBlockTypes($blockTypes);
$neoSettings->setGroups($groups);
if (!empty($settings['maxBlocks'])) {
$neoSettings->maxBlocks = $settings['maxBlocks'];
}
return $neoSettings;
}