class DefaultEntityProcessorForm in Feeds 8.3
The configuration form for the CSV parser.
Hierarchy
- class \Drupal\feeds\Plugin\Type\ExternalPluginFormBase implements PluginFormInterface, PluginAwareInterface uses DependencySerializationTrait, StringTranslationTrait
- class \Drupal\feeds\Feeds\Processor\Form\DefaultEntityProcessorForm implements ContainerInjectionInterface
Expanded class hierarchy of DefaultEntityProcessorForm
File
- src/
Feeds/ Processor/ Form/ DefaultEntityProcessorForm.php, line 18
Namespace
Drupal\feeds\Feeds\Processor\FormView source
class DefaultEntityProcessorForm extends ExternalPluginFormBase implements ContainerInjectionInterface {
/**
* The entity type manager.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Constructs a DefaultEntityProcessorForm object.
*
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity type manager.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager) {
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('entity_type.manager'));
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$tokens = [
'@entity' => mb_strtolower($this->plugin
->entityTypeLabel()),
'@entities' => mb_strtolower($this->plugin
->entityTypeLabelPlural()),
];
$entity_type = $this->entityTypeManager
->getDefinition($this->plugin
->entityType());
if ($entity_type
->getKey('langcode')) {
$langcode = $this->plugin
->getConfiguration('langcode');
$form['langcode'] = [
'#type' => 'select',
'#options' => $this->plugin
->languageOptions(),
'#title' => $this
->t('Language'),
'#required' => TRUE,
'#default_value' => $langcode,
];
// Add default value as one of the options if not yet available.
if ($langcode && !isset($form['langcode']['#options'][$langcode])) {
$form['langcode']['#options'][$langcode] = $this
->t('Unknown language: @language', [
'@language' => $langcode,
]);
}
}
$form['insert_new'] = [
'#type' => 'radios',
'#title' => $this
->t('Insert new @entities', $tokens),
'#description' => $this
->t('New @entities will be determined using mappings that are a "unique target".', $tokens),
'#options' => [
ProcessorInterface::INSERT_NEW => $this
->t('Insert new @entities', $tokens),
ProcessorInterface::SKIP_NEW => $this
->t('Do not insert new @entities', $tokens),
],
'#default_value' => $this->plugin
->getConfiguration('insert_new'),
];
$form['update_existing'] = [
'#type' => 'radios',
'#title' => $this
->t('Update existing @entities', $tokens),
'#description' => $this
->t('Existing @entities will be determined using mappings that are <strong>unique</strong>.', $tokens),
'#options' => [
ProcessorInterface::SKIP_EXISTING => $this
->t('Do not update existing @entities', $tokens),
ProcessorInterface::REPLACE_EXISTING => $this
->t('Replace existing @entities', $tokens),
ProcessorInterface::UPDATE_EXISTING => $this
->t('Update existing @entities', $tokens),
],
'#default_value' => $this->plugin
->getConfiguration('update_existing'),
];
$times = [
ProcessorInterface::EXPIRE_NEVER,
3600,
10800,
21600,
43200,
86400,
259200,
604800,
2592000,
2592000 * 3,
2592000 * 6,
31536000,
];
$period = array_map([
$this,
'formatExpire',
], array_combine($times, $times));
$options = $this
->getUpdateNonExistentActions();
$selected = $this->plugin
->getConfiguration('update_non_existent');
if (!isset($options[$selected])) {
$options[$selected] = $this
->t('@label (action no longer available)', [
'@label' => $selected,
]);
}
if (!empty($options)) {
$form['update_non_existent'] = [
'#type' => 'select',
'#title' => $this
->t('Previously imported items'),
'#description' => $this
->t('Select what to do with items that were previously imported, but are now no longer in the feed.'),
'#options' => $options,
'#default_value' => $this->plugin
->getConfiguration('update_non_existent'),
];
}
$form['expire'] = [
'#type' => 'select',
'#title' => $this
->t('Expire @entities', $tokens),
'#options' => $period,
'#description' => $this
->t('Select after how much time @entities should be deleted.', $tokens),
'#default_value' => $this->plugin
->getConfiguration('expire'),
];
if ($entity_type
->entityClassImplements(EntityOwnerInterface::class)) {
$form['owner_feed_author'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Owner: Feed author'),
'#description' => $this
->t('Use the feed author as the owner of the entities to be created.'),
'#default_value' => $this->plugin
->getConfiguration('owner_feed_author'),
];
$form['owner_id'] = [
'#type' => 'entity_autocomplete',
'#title' => $this
->t('Owner'),
'#description' => $this
->t('Select the owner of the entities to be created. Leave blank for %anonymous.', [
'%anonymous' => \Drupal::config('user.settings')
->get('anonymous'),
]),
'#target_type' => 'user',
'#default_value' => User::load($this->plugin
->getConfiguration('owner_id')),
'#states' => [
'invisible' => [
'input[name="processor_configuration[owner_feed_author]"]' => [
'checked' => TRUE,
],
],
],
];
}
$form['advanced'] = [
'#title' => $this
->t('Advanced settings'),
'#type' => 'details',
'#collapsed' => TRUE,
'#collapsible' => TRUE,
'#weight' => 10,
];
if ($entity_type
->entityClassImplements(EntityOwnerInterface::class)) {
$form['advanced']['authorize'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Authorize'),
'#description' => $this
->t('Check that the author has permission to create the @entity.', $tokens),
'#default_value' => $this->plugin
->getConfiguration('authorize'),
'#parents' => [
'processor_configuration',
'authorize',
],
];
}
$form['advanced']['skip_hash_check'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Force update'),
'#description' => $this
->t('Forces the update of items even if the feed did not change.'),
'#default_value' => $this->plugin
->getConfiguration('skip_hash_check'),
'#parents' => [
'processor_configuration',
'skip_hash_check',
],
'#states' => [
'visible' => [
'input[name="processor_configuration[update_existing]"]' => [
'value' => ProcessorInterface::UPDATE_EXISTING,
],
],
],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
$form_state
->setValue('owner_id', (int) $form_state
->getValue('owner_id', 0));
// Check if the selected option for 'update_non_existent' is still
// available.
$options = $this
->getUpdateNonExistentActions();
$selected = $form_state
->getValue('update_non_existent');
if (!isset($options[$selected])) {
$form_state
->setError($form['update_non_existent'], $this
->t('The option %label is no longer available. Please select a different option.', [
'%label' => $selected,
]));
}
}
/**
* Formats UNIX timestamps to readable strings.
*
* @param int $timestamp
* A UNIX timestamp.
*
* @return string
* A string in the format, "After (time)" or "Never."
*/
public function formatExpire($timestamp) {
if ($timestamp == ProcessorInterface::EXPIRE_NEVER) {
return $this
->t('Never');
}
return $this
->t('after @time', [
'@time' => \Drupal::service('date.formatter')
->formatInterval($timestamp),
]);
}
/**
* Get available actions to apply on the entity.
*
* @return array
* A list of applicable actions.
*/
protected function getUpdateNonExistentActions() {
$options = [];
$action_definitions = \Drupal::service('plugin.manager.action')
->getDefinitionsByType($this->plugin
->entityType());
foreach ($action_definitions as $id => $definition) {
// Filter out configurable actions.
$interfaces = class_implements($definition['class']);
if (isset($interfaces[ConfigurableInterface::class])) {
continue;
}
// @todo remove when Drupal 8 support has ended.
if (isset($interfaces['Drupal\\Component\\Plugin\\ConfigurablePluginInterface'])) {
continue;
}
// Filter out actions that need confirmation.
if (!empty($definition['confirm_form_route_name'])) {
continue;
}
// Check for deprecated action plugins.
foreach ($this
->getDeprecatedActionClasses() as $deprecated_class_name) {
if ($definition['class'] === $deprecated_class_name || is_subclass_of($definition['class'], $deprecated_class_name)) {
continue 2;
}
}
$options[$id] = $definition['label'];
}
return [
'_keep' => $this
->t('Keep'),
'_delete' => $this
->t('Delete'),
] + $options;
}
/**
* Returns a list of classes from deprecated action plugins.
*
* @return string[]
* An array of class names.
*/
protected function getDeprecatedActionClasses() {
// @todo remove when Drupal 8 support has ended.
return [
'Drupal\\comment\\Plugin\\Action\\PublishComment',
'Drupal\\comment\\Plugin\\Action\\UnpublishComment',
'Drupal\\comment\\Plugin\\Action\\SaveComment',
'Drupal\\node\\Plugin\\Action\\PublishNode',
'Drupal\\node\\Plugin\\Action\\UnpublishNode',
'Drupal\\node\\Plugin\\Action\\SaveNode',
];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DefaultEntityProcessorForm:: |
protected | property | The entity type manager. | |
DefaultEntityProcessorForm:: |
public | function |
Form constructor. Overrides PluginFormInterface:: |
|
DefaultEntityProcessorForm:: |
public static | function |
Instantiates a new instance of this class. Overrides ContainerInjectionInterface:: |
|
DefaultEntityProcessorForm:: |
public | function | Formats UNIX timestamps to readable strings. | |
DefaultEntityProcessorForm:: |
protected | function | Returns a list of classes from deprecated action plugins. | |
DefaultEntityProcessorForm:: |
protected | function | Get available actions to apply on the entity. | |
DefaultEntityProcessorForm:: |
public | function |
Form validation handler. Overrides ExternalPluginFormBase:: |
|
DefaultEntityProcessorForm:: |
public | function | Constructs a DefaultEntityProcessorForm object. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
ExternalPluginFormBase:: |
protected | property | The Feeds plugin. | |
ExternalPluginFormBase:: |
public | function |
Sets the plugin for this object. Overrides PluginAwareInterface:: |
|
ExternalPluginFormBase:: |
public | function |
Form submission handler. Overrides PluginFormInterface:: |
4 |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |