VarnishImagePurgeConfiguration.php in Varnish purger 8.2
File
modules/varnish_image_purge/src/Form/VarnishImagePurgeConfiguration.php
View source
<?php
namespace Drupal\varnish_image_purge\Form;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\ContentEntityType;
use Drupal\Core\Entity\EntityTypeBundleInfo;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Form\ConfigFormBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
class VarnishImagePurgeConfiguration extends ConfigFormBase {
private $entityTypeManager;
private $entityTypeBundleInfo;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeManagerInterface $entityTypeManager, EntityTypeBundleInfo $entityTypeBundleInfo) {
parent::__construct($config_factory);
$this->entityTypeManager = $entityTypeManager;
$this->entityTypeBundleInfo = $entityTypeBundleInfo;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('entity_type.manager'), $container
->get('entity_type.bundle.info'));
}
public function getFormId() {
return 'varnish_image_purge_configuration_form';
}
protected function getEditableConfigNames() {
return [
'varnish_image_purge.configuration',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this
->config('varnish_image_purge.configuration');
$entity_types = $config
->get('entity_types');
$content_entity_types = [];
$entity_type_definitions = $this->entityTypeManager
->getDefinitions();
foreach ($entity_type_definitions as $definition) {
if ($definition instanceof ContentEntityType) {
$content_entity_types[] = $definition;
}
}
if (empty($content_entity_types)) {
$this
->messenger()
->addStatus($this
->t('No content entities were found'));
return NULL;
}
foreach ($content_entity_types as $content_entity_type) {
$form['intro'] = [
'#markup' => t('Configure bundles of entity types that Varnish image purge should be used for, if none selected, all bundles form all entity types will be used. Just the fields of type image will be purge.'),
];
$default_value = [];
if (!is_null($entity_types) && isset($entity_types[$content_entity_type
->id()])) {
$default_value = $entity_types[$content_entity_type
->id()];
}
$form['entity_types'][$content_entity_type
->id()] = [
'#type' => 'checkboxes',
'#title' => $content_entity_type
->getLabel(),
'#multiple' => TRUE,
'#options' => $this
->getOptionsFromEntity($content_entity_type),
'#default_value' => $default_value,
];
}
return parent::buildForm($form, $form_state);
}
public function validateForm(array &$form, FormStateInterface $form_state) {
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this
->config('varnish_image_purge.configuration');
$values = [];
foreach ($form_state
->getValues() as $entity_type => $bundles) {
if (is_array($bundles)) {
foreach ($bundles as $bundle_id => $bundle) {
if ($bundle !== 0) {
$values[$entity_type][] = $bundle_id;
}
}
}
}
$config
->set('entity_types', $values);
$config
->save();
parent::submitForm($form, $form_state);
}
private function getOptionsFromEntity(ContentEntityType $content_entity_type) {
$bundles = $this->entityTypeBundleInfo
->getBundleInfo($content_entity_type
->id());
$options = [];
foreach ($bundles as $key => $bundle) {
$options[$key] = $bundle['label'];
}
return $options;
}
}