コード例 #1
0
ファイル: FieldClonerForm.php プロジェクト: joebachana/usatne
  /**
   * {@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
      $this->entity->addNewFieldMappings($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'
        );
      }

    }

  }