Example #1
0
 /**
  * @inheritDoc ISavableComponentType::prepSettings()
  *
  * @param array $settings
  *
  * @return array
  */
 public function prepSettings($settings)
 {
     if ($settings instanceof MatrixSettingsModel) {
         return $settings;
     }
     $matrixSettings = new MatrixSettingsModel($this->model);
     $blockTypes = array();
     if (!empty($settings['blockTypes'])) {
         foreach ($settings['blockTypes'] as $blockTypeId => $blockTypeSettings) {
             $blockType = new MatrixBlockTypeModel();
             $blockType->id = $blockTypeId;
             $blockType->fieldId = $this->model->id;
             $blockType->name = $blockTypeSettings['name'];
             $blockType->handle = $blockTypeSettings['handle'];
             $fields = array();
             if (!empty($blockTypeSettings['fields'])) {
                 foreach ($blockTypeSettings['fields'] as $fieldId => $fieldSettings) {
                     $field = new FieldModel();
                     $field->id = $fieldId;
                     $field->name = $fieldSettings['name'];
                     $field->handle = $fieldSettings['handle'];
                     $field->required = !empty($fieldSettings['required']);
                     $field->translatable = !empty($fieldSettings['translatable']);
                     $field->type = $fieldSettings['type'];
                     if (isset($fieldSettings['typesettings'])) {
                         $field->settings = $fieldSettings['typesettings'];
                     }
                     $fields[] = $field;
                 }
             }
             $blockType->setFields($fields);
             $blockTypes[] = $blockType;
         }
     }
     $matrixSettings->setBlockTypes($blockTypes);
     if (!empty($settings['maxBlocks'])) {
         $matrixSettings->maxBlocks = $settings['maxBlocks'];
     }
     return $matrixSettings;
 }
 public function processMatrix($originField, $field)
 {
     $settings = new MatrixSettingsModel($field);
     // Get the original Matrix Blocks
     $blockTypes = craft()->matrix->getBlockTypesByFieldId($originField->id);
     $newBlockTypes = array();
     foreach ($blockTypes as $originBlockType) {
         $newBlockType = new MatrixBlockTypeModel();
         // New Matrix Block
         $newBlockType->fieldId = $field->id;
         $newBlockType->name = $originBlockType->name;
         $newBlockType->handle = $originBlockType->handle;
         $newBlockFields = array();
         foreach ($originBlockType->fields as $originField) {
             $newBlockField = new FieldModel();
             // New Matrix Block field
             $newBlockField->name = $originField->name;
             $newBlockField->handle = $originField->handle;
             $newBlockField->required = $originField->required;
             $newBlockField->translatable = $originField->translatable;
             $newBlockField->type = $originField->type;
             $newBlockField->settings = $originField->settings;
             $newBlockFields[] = $newBlockField;
         }
         $newBlockType->setFields($newBlockFields);
         craft()->matrix->saveBlockType($newBlockType);
         $newBlockTypes[] = $newBlockType;
     }
     $settings->setBlockTypes($newBlockTypes);
     craft()->matrix->saveSettings($settings);
 }