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.
14 class ImageToolkitForm extends ConfigFormBase {
17 * An array containing currently available toolkits.
19 * @var \Drupal\Core\ImageToolkit\ImageToolkitInterface[]
21 protected $availableToolkits = [];
24 * Constructs a ImageToolkitForm object.
26 * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
27 * The factory for configuration objects.
28 * @param \Drupal\Core\ImageToolkit\ImageToolkitManager $manager
29 * The image toolkit plugin manager.
31 public function __construct(ConfigFactoryInterface $config_factory, ImageToolkitManager $manager) {
32 parent::__construct($config_factory);
34 foreach ($manager->getAvailableToolkits() as $id => $definition) {
35 $this->availableToolkits[$id] = $manager->createInstance($id);
42 public static function create(ContainerInterface $container) {
44 $container->get('config.factory'),
45 $container->get('image.toolkit.manager')
52 public function getFormId() {
53 return 'system_image_toolkit_settings';
59 protected function getEditableConfigNames() {
60 return ['system.image'];
66 public function buildForm(array $form, FormStateInterface $form_state) {
67 $current_toolkit = $this->config('system.image')->get('toolkit');
69 $form['image_toolkit'] = [
71 '#title' => $this->t('Select an image processing toolkit'),
72 '#default_value' => $current_toolkit,
76 // If we have more than one image toolkit, allow the user to select the one
77 // to use, and load each of the toolkits' settings form.
78 foreach ($this->availableToolkits as $id => $toolkit) {
79 $definition = $toolkit->getPluginDefinition();
80 $form['image_toolkit']['#options'][$id] = $definition['title'];
81 $form['image_toolkit_settings'][$id] = [
83 '#title' => $this->t('@toolkit settings', ['@toolkit' => $definition['title']]),
88 ':radio[name="image_toolkit"]' => ['value' => $id],
92 $form['image_toolkit_settings'][$id] += $toolkit->buildConfigurationForm([], $form_state);
95 return parent::buildForm($form, $form_state);
101 public function validateForm(array &$form, FormStateInterface $form_state) {
102 parent::validateForm($form, $form_state);
104 // Call the form validation handler for each of the toolkits.
105 foreach ($this->availableToolkits as $toolkit) {
106 $toolkit->validateConfigurationForm($form, $form_state);
113 public function submitForm(array &$form, FormStateInterface $form_state) {
114 $this->config('system.image')
115 ->set('toolkit', $form_state->getValue('image_toolkit'))
118 // Call the form submit handler for each of the toolkits.
119 foreach ($this->availableToolkits as $toolkit) {
120 $toolkit->submitConfigurationForm($form, $form_state);
123 parent::submitForm($form, $form_state);