3 namespace Drupal\system\Form;
5 use Drupal\Core\Config\ConfigFactoryInterface;
6 use Drupal\Core\Form\ConfigFormBase;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\Core\ImageToolkit\ImageToolkitManager;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
12 * Configures image toolkit settings for this site.
16 class ImageToolkitForm extends ConfigFormBase {
19 * An array containing currently available toolkits.
21 * @var \Drupal\Core\ImageToolkit\ImageToolkitInterface[]
23 protected $availableToolkits = [];
26 * Constructs a ImageToolkitForm object.
28 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
29 * The factory for configuration objects.
30 * @param \Drupal\Core\ImageToolkit\ImageToolkitManager $manager
31 * The image toolkit plugin manager.
33 public function __construct(ConfigFactoryInterface $config_factory, ImageToolkitManager $manager) {
34 parent::__construct($config_factory);
36 foreach ($manager->getAvailableToolkits() as $id => $definition) {
37 $this->availableToolkits[$id] = $manager->createInstance($id);
44 public static function create(ContainerInterface $container) {
46 $container->get('config.factory'),
47 $container->get('image.toolkit.manager')
54 public function getFormId() {
55 return 'system_image_toolkit_settings';
61 protected function getEditableConfigNames() {
62 return ['system.image'];
68 public function buildForm(array $form, FormStateInterface $form_state) {
69 $current_toolkit = $this->config('system.image')->get('toolkit');
71 $form['image_toolkit'] = [
73 '#title' => $this->t('Select an image processing toolkit'),
74 '#default_value' => $current_toolkit,
78 // If we have more than one image toolkit, allow the user to select the one
79 // to use, and load each of the toolkits' settings form.
80 foreach ($this->availableToolkits as $id => $toolkit) {
81 $definition = $toolkit->getPluginDefinition();
82 $form['image_toolkit']['#options'][$id] = $definition['title'];
83 $form['image_toolkit_settings'][$id] = [
85 '#title' => $this->t('@toolkit settings', ['@toolkit' => $definition['title']]),
90 ':radio[name="image_toolkit"]' => ['value' => $id],
94 $form['image_toolkit_settings'][$id] += $toolkit->buildConfigurationForm([], $form_state);
97 return parent::buildForm($form, $form_state);
103 public function validateForm(array &$form, FormStateInterface $form_state) {
104 parent::validateForm($form, $form_state);
106 // Call the form validation handler for each of the toolkits.
107 foreach ($this->availableToolkits as $toolkit) {
108 $toolkit->validateConfigurationForm($form, $form_state);
115 public function submitForm(array &$form, FormStateInterface $form_state) {
116 $this->config('system.image')
117 ->set('toolkit', $form_state->getValue('image_toolkit'))
120 // Call the form submit handler for each of the toolkits.
121 foreach ($this->availableToolkits as $toolkit) {
122 $toolkit->submitConfigurationForm($form, $form_state);
125 parent::submitForm($form, $form_state);