You are here

class FormElementComponentType in Flexiform 8

Plugin for field widget component types.

Plugin annotation


@FormComponentType(
  id = "form_element",
  label = @Translation("Form Element"),
  component_class = "Drupal\flexiform\Plugin\FormComponentType\FormElementComponent",
)

Hierarchy

Expanded class hierarchy of FormElementComponentType

File

src/Plugin/FormComponentType/FormElementComponentType.php, line 25

Namespace

Drupal\flexiform\Plugin\FormComponentType
View source
class FormElementComponentType extends FormComponentTypeCreateableBase implements ContainerFactoryPluginInterface {
  use ContextAwarePluginAssignmentTrait;

  /**
   * The form element plugin manager.
   *
   * @var \Drupal\flexiform\FormElementPluginManager
   */
  protected $pluginManager;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('plugin.manager.flexiform.form_element'));
  }

  /**
   * Construct a new form element component type object.
   *
   * @param array $configuration
   *   A configuration array containing information about the plugin instance.
   * @param string $plugin_id
   *   The plugin_id for the plugin instance.
   * @param mixed $plugin_definition
   *   The plugin implementation definition.
   * @param \Drupal\flexiform\FormElementPluginManager $plugin_manager
   *   The form element plugin manager.
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, FormElementPluginManager $plugin_manager) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->pluginManager = $plugin_manager;
  }

  /**
   * {@inheritdoc}
   */
  public function componentRows(EntityDisplayFormBase $form_object, array $form, FormStateInterface $form_state) {
    $rows = [];
    foreach ($this
      ->getFormDisplay()
      ->getComponents() as $component_name => $options) {
      if (isset($options['component_type']) && $options['component_type'] == $this
        ->getPluginId()) {
        $rows[$component_name] = $this
          ->buildComponentRow($form_object, $component_name, $form, $form_state);
      }
    }
    return $rows;
  }

  /**
   * {@inheritdoc}
   */
  public function addComponentForm(array $form, FormStateInterface $form_state) {

    // Build the parents for the form element selector.
    $parents = $form['#parents'];
    $parents[] = 'form_element';
    $available_plugins = $this->pluginManager
      ->getDefinitionsForContexts($this
      ->getFormEntityManager($form, $form_state)
      ->getContexts());
    $form['#prefix'] = '<div id="flexiform-form-element-add-wrapper">';
    $form['#suffix'] = '</div>';
    $plugin_options = [];
    foreach ($available_plugins as $plugin_id => $plugin_definition) {
      if (empty($plugin_definition['no_ui'])) {
        $plugin_options[$plugin_id] = $plugin_definition['label'];
      }
    }
    $form['form_element'] = [
      '#type' => 'select',
      '#required' => TRUE,
      '#options' => $plugin_options,
      '#title' => $this
        ->t('Form Element'),
      '#ajax' => [
        'callback' => [
          $this,
          'ajaxFormElementSelect',
        ],
        'wrapper' => 'flexiform-form-element-add-wrapper',
      ],
    ];
    if ($plugin_id = NestedArray::getValue($form_state
      ->getUserInput(), $parents)) {
      $plugin = $this->pluginManager
        ->createInstance($plugin_id);
      if ($plugin instanceof ContextAwarePluginInterface) {
        $contexts = $this
          ->getFormEntityManager()
          ->getContexts();
        $form['context_mapping'] = [
          '#parents' => [
            'options',
            'settings',
            'context_mapping',
          ],
        ] + $this
          ->addContextAssignmentElement($plugin, $contexts);
        foreach (Element::children($form['context_mapping']) as $mapping_key) {
          $form['context_mapping'][$mapping_key]['#empty_option'] = $this
            ->t('- Select -');
        }
      }
      $form += $plugin
        ->settingsForm($form, $form_state);
    }
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function addComponentFormSubmit(array $form, FormStateInterface $form_state) {
  }

  /**
   * {@inheritdoc}
   */
  public function ajaxFormElementSelect(array $form, FormStateInterface $form_state) {
    $element = $form_state
      ->getTriggeringElement();
    $array_parents = $element['#array_parents'];
    array_pop($array_parents);
    return NestedArray::getValue($form, $array_parents);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ContextAwarePluginAssignmentTrait::addContextAssignmentElement protected function Builds a form element for assigning a context to a given slot.
ContextAwarePluginAssignmentTrait::contextHandler protected function Wraps the context handler.
ContextAwarePluginAssignmentTrait::t abstract protected function Ensures the t() method is available.
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FormComponentTypeBase::$components protected property A list of components that have been constructed.
FormComponentTypeBase::$formDisplay protected property The form display.
FormComponentTypeBase::$formEntityManager protected property The form entity manager.
FormComponentTypeBase::buildComponentRow protected function Build a component row for a component of this type. 1
FormComponentTypeBase::getApplicableRendererPluginOptions protected function Get applicable renderer plugin options. 1
FormComponentTypeBase::getComponent public function Get a component object. Overrides FormComponentTypeInterface::getComponent 2
FormComponentTypeBase::getDefaultRendererPlugin protected function Get the default renderer plugin. 1
FormComponentTypeBase::getFormDisplay public function Get the form display. Overrides FormComponentTypeInterface::getFormDisplay
FormComponentTypeBase::getFormEntityManager public function Get the form entity manager. Overrides FormComponentTypeInterface::getFormEntityManager
FormComponentTypeBase::setFormDisplay public function Set the form display. Overrides FormComponentTypeInterface::setFormDisplay
FormComponentTypeBase::setFormEntityManager public function
FormComponentTypeBase::submitComponentRow public function 1
FormComponentTypeCreateableBase::addComponentFormValidate public function Validate the add component form. Overrides FormComponentTypeCreateableInterface::addComponentFormValidate
FormElementComponentType::$pluginManager protected property The form element plugin manager.
FormElementComponentType::addComponentForm public function Get a form for adding a component of this type. Overrides FormComponentTypeCreateableBase::addComponentForm
FormElementComponentType::addComponentFormSubmit public function Submit the add component options form. Overrides FormComponentTypeCreateableBase::addComponentFormSubmit
FormElementComponentType::ajaxFormElementSelect public function
FormElementComponentType::componentRows public function Overrides FormComponentTypeBase::componentRows
FormElementComponentType::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
FormElementComponentType::__construct public function Construct a new form element component type object. Overrides PluginBase::__construct
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2