Beispiel #1
0
 /**
  * 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;
 }