View source
<?php
namespace Drupal\payment_reference\Plugin\Field\FieldWidget;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Field\WidgetBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\payment_reference\PaymentFactoryInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PaymentReference extends WidgetBase implements ContainerFactoryPluginInterface {
protected $configFactory;
protected $currentUser;
protected $paymentFactory;
public function __construct($plugin_id, array $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, array $third_party_settings, ConfigFactoryInterface $config_factory, AccountInterface $current_user, PaymentFactoryInterface $payment_factory) {
parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $third_party_settings);
$this->configFactory = $config_factory;
$this->currentUser = $current_user;
$this->paymentFactory = $payment_factory;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['third_party_settings'], $container
->get('config.factory'), $container
->get('current_user'), $container
->get('payment_reference.payment_factory'));
}
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$config = $this->configFactory
->get('payment_reference.payment_type');
$payment = $this->paymentFactory
->createPayment($this->fieldDefinition);
$element['target_id'] = array(
'#default_value' => isset($items[$delta]) ? (int) $items[$delta]->target_id : NULL,
'#limit_allowed_plugin_ids' => $config
->get('limit_allowed_plugins') ? $config
->get('allowed_plugin_ids') : NULL,
'#plugin_selector_id' => $config
->get('plugin_selector_id'),
'#prototype_payment' => $payment,
'#queue_category_id' => $items
->getEntity()
->getEntityTypeId() . '.' . $items
->getEntity()
->bundle() . '.' . $this->fieldDefinition
->getName(),
'#queue_owner_id' => (int) $this->currentUser
->id(),
'#required' => $this->fieldDefinition
->isRequired(),
'#type' => 'payment_reference',
);
return $element;
}
public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
return array(
'target_id' => $form[$this->fieldDefinition
->getName()]['widget']['target_id']['#value'],
);
}
}