/** * Prepares the Neo field settings before they're saved to the database. * Handles preparing block types, field layouts and groups. * * @param array $settings * @return Neo_SettingsModel */ 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; }