コード例 #1
0
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     $base_fields = array_filter($form_state->getValue('base_fields'));
     $new_map = [];
     // Clone Base Fields
     foreach ($base_fields as $base_field) {
         /** @var \Drupal\field\Entity\FieldConfig $new_field */
         $new_field = $this->fieldManager->cloneField($this->entity, $base_field);
         $new_map[$new_field->getName()] = $base_field;
     }
     // Clone Configurable Fields
     if ($config_field_ids = $form_state->getValue('config_fields')) {
         foreach ($config_field_ids as $config_field_id) {
             /** @var FieldConfig $config_definition */
             if ($config_definition = FieldConfig::load($config_field_id)) {
                 $field_name = $config_definition->getFieldStorageDefinition()->getName();
                 $new_field = $this->fieldManager->cloneField($this->entity, $field_name, $config_definition->id());
                 $new_map[$new_field->getName()] = $field_name;
             }
         }
     }
     if ($new_map) {
         // Update Map
         $new_map += $this->entity->getFieldMap();
         $this->entity->setFieldMap($new_map);
         $this->entity->save();
         drupal_set_message($this->t('The fields have been created and mapped.'));
         if ($this->currentUser()->hasPermission('administer scheduled_update form display')) {
             // Redirect to form display so user and adjust settings.
             $form_state->setRedirectUrl(Url::fromRoute("entity.entity_form_display.scheduled_update.default", array($this->entity->getEntityTypeId() => $this->entity->id())));
         } else {
             drupal_set_message($this->t('You do not have permission to administer fields on Scheduled Updates.'), 'warning');
         }
     }
 }