merci-8.x-2.x-dev/modules/merci_line_item/src/Plugin/Field/FieldWidget/MerciLineItemWidget.php
modules/merci_line_item/src/Plugin/Field/FieldWidget/MerciLineItemWidget.php
<?php
namespace Drupal\merci_line_item\Plugin\Field\FieldWidget;
use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Render\Element;
use Drupal\inline_entity_form\TranslationHelper;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\inline_entity_form\Plugin\Field\FieldWidget\InlineEntityFormComplex;
/**
* Complex inline widget.
*
* @FieldWidget(
* id = "merci_line_item_form",
* label = @Translation("Merci Line Item form"),
* field_types = {
* "entity_reference"
* },
* multiple_values = true
* )
*/
class MerciLineItemWidget extends InlineEntityFormComplex {
/**
* {@inheritdoc}
*/
public static function defaultSettings() {
$defaults = parent::defaultSettings();
return $defaults;
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
$element = parent::settingsForm($form, $form_state);
return $element;
}
/**
* {@inheritdoc}
*/
public function settingsSummary() {
$summary = parent::settingsSummary();
return $summary;
}
/**
* {@inheritdoc}
*/
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
// Build a parents array for this element's values in the form.
$parents = array_merge($element['#field_parents'], [
$items->getName(),
'form',
]);
// Assign a unique identifier to each IEF widget.
// Since $parents can get quite long, sha1() ensures that every id has
// a consistent and relatively short length while maintaining uniqueness.
$this->setIefId(sha1(implode('-', $parents)));
$this->prepareFormState($form_state, $items, $this->isTranslating($form_state));
$form_state->set(['inline_entity_form', $this->getIefId(), 'form'], 'add');
// If no form is open, show buttons that open one.
$open_form = $form_state->get(['inline_entity_form', $this->getIefId(), 'form']);
$target_bundles = $this->getTargetBundles();
$bundle = reset($target_bundles);
$form_state->set(['inline_entity_form', $this->getIefId(), 'form settings'], [
'bundle' => $bundle,
]);
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$element['form']['#weight'] = -1;
return $element;
}
}
