Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
CRAP | |
58.14% |
50 / 86 |
| SettingsForm | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
66.25 | |
58.14% |
50 / 86 |
| __construct | |
100.00% |
1 / 1 |
3 | |
100.00% |
10 / 10 |
|||
| create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getFormId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getEditableConfigNames | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| buildForm | |
0.00% |
0 / 1 |
27.03 | |
49.02% |
25 / 51 |
|||
| validateForm | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| submitForm | |
0.00% |
0 / 1 |
5.31 | |
76.92% |
10 / 13 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\aggregator\Form\SettingsForm. | |
| */ | |
| namespace Drupal\aggregator\Form; | |
| use Drupal\aggregator\Plugin\AggregatorPluginManager; | |
| use Drupal\Component\Utility\SafeMarkup; | |
| use Drupal\Core\Config\ConfigFactoryInterface; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\Core\Plugin\PluginFormInterface; | |
| use Drupal\Core\StringTranslation\TranslationInterface; | |
| use Drupal\Core\Form\ConfigFormBase; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Configures aggregator settings for this site. | |
| */ | |
| class SettingsForm extends ConfigFormBase { | |
| /** | |
| * The aggregator plugin managers. | |
| * | |
| * @var \Drupal\aggregator\Plugin\AggregatorPluginManager[] | |
| */ | |
| protected $managers = array(); | |
| /** | |
| * The instantiated plugin instances that have configuration forms. | |
| * | |
| * @var \Drupal\Core\Plugin\PluginFormInterface[] | |
| */ | |
| protected $configurableInstances = array(); | |
| /** | |
| * The aggregator plugin definitions. | |
| * | |
| * @var array | |
| */ | |
| protected $definitions = array( | |
| 'fetcher' => array(), | |
| 'parser' => array(), | |
| 'processor' => array(), | |
| ); | |
| /** | |
| * Constructs a \Drupal\aggregator\SettingsForm object. | |
| * | |
| * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory | |
| * The factory for configuration objects. | |
| * @param \Drupal\aggregator\Plugin\AggregatorPluginManager $fetcher_manager | |
| * The aggregator fetcher plugin manager. | |
| * @param \Drupal\aggregator\Plugin\AggregatorPluginManager $parser_manager | |
| * The aggregator parser plugin manager. | |
| * @param \Drupal\aggregator\Plugin\AggregatorPluginManager $processor_manager | |
| * The aggregator processor plugin manager. | |
| * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation | |
| * The string translation manager. | |
| */ | |
| public function __construct(ConfigFactoryInterface $config_factory, AggregatorPluginManager $fetcher_manager, AggregatorPluginManager $parser_manager, AggregatorPluginManager $processor_manager, TranslationInterface $string_translation) { | |
| parent::__construct($config_factory); | |
| $this->stringTranslation = $string_translation; | |
| $this->managers = array( | |
| 'fetcher' => $fetcher_manager, | |
| 'parser' => $parser_manager, | |
| 'processor' => $processor_manager, | |
| ); | |
| // Get all available fetcher, parser and processor definitions. | |
| foreach (array('fetcher', 'parser', 'processor') as $type) { | |
| foreach ($this->managers[$type]->getDefinitions() as $id => $definition) { | |
| $this->definitions[$type][$id] = SafeMarkup::format('@title <span class="description">@description</span>', array('@title' => $definition['title'], '@description' => $definition['description'])); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('config.factory'), | |
| $container->get('plugin.manager.aggregator.fetcher'), | |
| $container->get('plugin.manager.aggregator.parser'), | |
| $container->get('plugin.manager.aggregator.processor'), | |
| $container->get('string_translation') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFormId() { | |
| return 'aggregator_admin_form'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| protected function getEditableConfigNames() { | |
| return ['aggregator.settings']; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function buildForm(array $form, FormStateInterface $form_state) { | |
| $config = $this->config('aggregator.settings'); | |
| // Global aggregator settings. | |
| $form['aggregator_allowed_html_tags'] = array( | |
| '#type' => 'textfield', | |
| '#title' => $this->t('Allowed HTML tags'), | |
| '#size' => 80, | |
| '#maxlength' => 255, | |
| '#default_value' => $config->get('items.allowed_html'), | |
| '#description' => $this->t('A space-separated list of HTML tags allowed in the content of feed items. Disallowed tags are stripped from the content.'), | |
| ); | |
| // Only show basic configuration if there are actually options. | |
| $basic_conf = array(); | |
| if (count($this->definitions['fetcher']) > 1) { | |
| $basic_conf['aggregator_fetcher'] = array( | |
| '#type' => 'radios', | |
| '#title' => $this->t('Fetcher'), | |
| '#description' => $this->t('Fetchers download data from an external source. Choose a fetcher suitable for the external source you would like to download from.'), | |
| '#options' => $this->definitions['fetcher'], | |
| '#default_value' => $config->get('fetcher'), | |
| ); | |
| } | |
| if (count($this->definitions['parser']) > 1) { | |
| $basic_conf['aggregator_parser'] = array( | |
| '#type' => 'radios', | |
| '#title' => $this->t('Parser'), | |
| '#description' => $this->t('Parsers transform downloaded data into standard structures. Choose a parser suitable for the type of feeds you would like to aggregate.'), | |
| '#options' => $this->definitions['parser'], | |
| '#default_value' => $config->get('parser'), | |
| ); | |
| } | |
| if (count($this->definitions['processor']) > 1) { | |
| $basic_conf['aggregator_processors'] = array( | |
| '#type' => 'checkboxes', | |
| '#title' => $this->t('Processors'), | |
| '#description' => $this->t('Processors act on parsed feed data, for example they store feed items. Choose the processors suitable for your task.'), | |
| '#options' => $this->definitions['processor'], | |
| '#default_value' => $config->get('processors'), | |
| ); | |
| } | |
| if (count($basic_conf)) { | |
| $form['basic_conf'] = array( | |
| '#type' => 'details', | |
| '#title' => $this->t('Basic configuration'), | |
| '#description' => $this->t('For most aggregation tasks, the default settings are fine.'), | |
| '#open' => TRUE, | |
| ); | |
| $form['basic_conf'] += $basic_conf; | |
| } | |
| // Call buildConfigurationForm() on the active fetcher and parser. | |
| foreach (array('fetcher', 'parser') as $type) { | |
| $active = $config->get($type); | |
| if (array_key_exists($active, $this->definitions[$type])) { | |
| $instance = $this->managers[$type]->createInstance($active); | |
| if ($instance instanceof PluginFormInterface) { | |
| $form = $instance->buildConfigurationForm($form, $form_state); | |
| // Store the instance for validate and submit handlers. | |
| // Keying by ID would bring conflicts, because two instances of a | |
| // different type could have the same ID. | |
| $this->configurableInstances[] = $instance; | |
| } | |
| } | |
| } | |
| // Implementing processor plugins will expect an array at $form['processors']. | |
| $form['processors'] = array(); | |
| // Call buildConfigurationForm() for each active processor. | |
| foreach ($this->definitions['processor'] as $id => $definition) { | |
| if (in_array($id, $config->get('processors'))) { | |
| $instance = $this->managers['processor']->createInstance($id); | |
| if ($instance instanceof PluginFormInterface) { | |
| $form = $instance->buildConfigurationForm($form, $form_state); | |
| // Store the instance for validate and submit handlers. | |
| // Keying by ID would bring conflicts, because two instances of a | |
| // different type could have the same ID. | |
| $this->configurableInstances[] = $instance; | |
| } | |
| } | |
| } | |
| return parent::buildForm($form, $form_state); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function validateForm(array &$form, FormStateInterface $form_state) { | |
| parent::validateForm($form, $form_state); | |
| // Let active plugins validate their settings. | |
| foreach ($this->configurableInstances as $instance) { | |
| $instance->validateConfigurationForm($form, $form_state); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| parent::submitForm($form, $form_state); | |
| $config = $this->config('aggregator.settings'); | |
| // Let active plugins save their settings. | |
| foreach ($this->configurableInstances as $instance) { | |
| $instance->submitConfigurationForm($form, $form_state); | |
| } | |
| $config->set('items.allowed_html', $form_state->getValue('aggregator_allowed_html_tags')); | |
| if ($form_state->hasValue('aggregator_fetcher')) { | |
| $config->set('fetcher', $form_state->getValue('aggregator_fetcher')); | |
| } | |
| if ($form_state->hasValue('aggregator_parser')) { | |
| $config->set('parser', $form_state->getValue('aggregator_parser')); | |
| } | |
| if ($form_state->hasValue('aggregator_processors')) { | |
| $config->set('processors', array_filter($form_state->getValue('aggregator_processors'))); | |
| } | |
| $config->save(); | |
| } | |
| } |