View source
<?php
namespace Drupal\media_pdf_thumbnail\Form;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityFieldManager;
use Drupal\Core\Entity\EntityTypeBundleInfo;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class BundlesSettingsForm extends ConfigFormBase {
const SETTINGS = 'media_pdf_thumbnail.bundles.settings';
protected $entityTypeBundleInfo;
protected $entityFieldManager;
public function __construct(ConfigFactoryInterface $config_factory, EntityTypeBundleInfo $entityTypeBundleInfo, EntityFieldManager $entityFieldManager) {
parent::__construct($config_factory);
$this->entityTypeBundleInfo = $entityTypeBundleInfo;
$this->entityFieldManager = $entityFieldManager;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('entity_type.bundle.info'), $container
->get('entity_field.manager'));
}
public function getFormId() {
return 'bundles_settings_form';
}
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this
->config(static::SETTINGS);
foreach ($this
->getFieldsList() as $bundleId => $infos) {
if (!empty($infos['fields'])) {
$form[$bundleId] = [
'#type' => 'fieldset',
'#title' => t($infos['label']),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
];
$form[$bundleId][$bundleId . '_field'] = [
'#type' => 'select',
'#title' => $this
->t('Field to use to generate thumbnail'),
'#description' => $this
->t('The file attached must be pdf type, otherwise it will be ignored.</br>If that field is multivalued, only the first value will be used.'),
'#options' => $infos['fields'],
'#default_value' => $config
->get($bundleId . '_field'),
];
$form[$bundleId][$bundleId . '_enable'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Enable'),
'#default_value' => $config
->get($bundleId . '_enable'),
];
}
}
$form['cron'] = [
'#type' => 'fieldset',
'#title' => t('CRON'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
];
$form['cron']['cron_enable'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Enable cron'),
'#default_value' => $config
->get('cron_enable'),
'#description' => $this
->t('If enabled, thumbnails process will be added in a separate queue for being generated in cron task.'),
];
$form['cron']['cron_time'] = [
'#type' => 'number',
'#title' => $this
->t('Minutes'),
'#default_value' => $config
->get('cron_time'),
'#description' => $this
->t('Default value is 1 minute'),
'#min' => 1,
];
return parent::buildForm($form, $form_state);
}
protected function getFieldsList() {
$bundles = $this->entityTypeBundleInfo
->getBundleInfo('media');
$output = [];
foreach ($bundles as $id => $bundle) {
$output[$id]['label'] = $bundle['label'];
foreach ($this->entityFieldManager
->getFieldDefinitions('media', $id) as $fieldDefinition) {
if ($fieldDefinition
->getType() == 'file') {
$output[$id]['fields'][$fieldDefinition
->getName()] = $fieldDefinition
->getName();
}
}
}
return $output;
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$editableConfig = $this->configFactory
->getEditable(static::SETTINGS);
foreach ($this
->getFieldsList() as $bundleId => $infos) {
$editableConfig
->set($bundleId . '_field', $form_state
->getValue($bundleId . '_field'));
$editableConfig
->set($bundleId . '_enable', $form_state
->getValue($bundleId . '_enable'));
}
$editableConfig
->set('cron_enable', $form_state
->getValue('cron_enable'));
$editableConfig
->set('cron_time', $form_state
->getValue('cron_time'));
$editableConfig
->save();
parent::submitForm($form, $form_state);
}
protected function getEditableConfigNames() {
return [
static::SETTINGS,
];
}
}