feeds_ex-8.x-1.0-alpha4/src/Feeds/CustomSource/XmlSource.php
src/Feeds/CustomSource/XmlSource.php
<?php
namespace Drupal\feeds_ex\Feeds\CustomSource;
use Drupal\Core\Form\FormStateInterface;
use Drupal\feeds\Plugin\Type\CustomSource\CustomSourceBase;
/**
* A XML Xpath source.
*
* @FeedsCustomSource(
* id = "xml",
* title = @Translation("XML Xpath"),
* )
*/
class XmlSource extends CustomSourceBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'label' => '',
'value' => '',
'machine_name' => '',
'raw' => FALSE,
'inner' => FALSE,
];
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form['#machine_name_source'] = 'label';
$form['label'] = [
'#title' => $this->t('Administrative label'),
'#type' => 'textfield',
'#default_value' => $this->configuration['label'],
'#weight' => -3,
];
$form['value'] = [
'#title' => $this->t('XPath value'),
'#type' => 'textfield',
'#default_value' => $this->configuration['value'],
'#weight' => 1,
'#description' => $this->t('The xpath query for the source field.'),
];
if ($this->configuration['machine_name']) {
$id = 'feeds-ex-xml-raw-' . $this->configuration['machine_name'];
$form['machine_name'] = [
'#type' => 'value',
'#value' => $this->configuration['machine_name'],
];
$form['label']['#required'] = TRUE;
$form['value']['#required'] = TRUE;
}
elseif (isset($form['#delta']) && isset($form['#column'])) {
$id = 'feeds-ex-xml-raw-' . $form['#delta'] . '-' . $form['#column'];
}
else {
$id = 'feeds-ex-xml-raw';
}
$form['raw'] = [
'#type' => 'checkbox',
'#title' => $this->t('Raw value'),
'#default_value' => $this->configuration['raw'],
'#id' => $id,
'#weight' => 3,
];
$form['inner'] = [
'#type' => 'checkbox',
'#title' => $this->t('Inner XML'),
'#default_value' => $this->configuration['inner'],
'#states' => [
'visible' => ['#' . $id => ['checked' => TRUE]],
],
'#weight' => 4,
];
return $form;
}
/**
* {@inheritdoc}
*/
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
if ($form_state->getValue('value')) {
if (!strlen($form_state->getValue('label'))) {
$form_state->setError($form['label'], $this->t('The field %field is required.', [
'%field' => $this->t('Administrative label'),
]));
}
if (!strlen($form_state->getValue('machine_name'))) {
$form_state->setError($form['machine_name'], $this->t('The custom source must have a machine name.'));
}
}
parent::validateConfigurationForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function additionalColumns(array $custom_source) {
$column_definitions = [
'raw' => [
'#header' => $this->t('Raw value'),
'#value' => [
'#markup' => !empty($custom_source['raw']) ? $this->t('Enabled') : $this->t('Disabled'),
],
],
'inner' => [
'#header' => $this->t('Inner XML'),
'#value' => [
'#markup' => !empty($custom_source['inner']) ? $this->t('Enabled') : $this->t('Disabled'),
],
],
];
return $column_definitions;
}
}
