function ImageStyleEditForm::form

Same name in other branches
  1. 9 core/modules/image/src/Form/ImageStyleEditForm.php \Drupal\image\Form\ImageStyleEditForm::form()
  2. 8.9.x core/modules/image/src/Form/ImageStyleEditForm.php \Drupal\image\Form\ImageStyleEditForm::form()
  3. 11.x core/modules/image/src/Form/ImageStyleEditForm.php \Drupal\image\Form\ImageStyleEditForm::form()

Overrides ImageStyleFormBase::form

File

core/modules/image/src/Form/ImageStyleEditForm.php, line 53

Class

ImageStyleEditForm
Controller for image style edit form.

Namespace

Drupal\image\Form

Code

public function form(array $form, FormStateInterface $form_state) {
    $user_input = $form_state->getUserInput();
    $form['#title'] = $this->t('Edit style %name', [
        '%name' => $this->entity
            ->label(),
    ]);
    $form['#tree'] = TRUE;
    $form['#attached']['library'][] = 'image/admin';
    // Show the thumbnail preview.
    $preview_arguments = [
        '#theme' => 'image_style_preview',
        '#style' => $this->entity,
    ];
    $form['preview'] = [
        '#type' => 'item',
        '#title' => $this->t('Preview'),
        '#markup' => \Drupal::service('renderer')->render($preview_arguments),
        // Render preview above parent elements.
'#weight' => -5,
    ];
    // Build the list of existing image effects for this image style.
    $form['effects'] = [
        '#type' => 'table',
        '#header' => [
            $this->t('Effect'),
            $this->t('Weight'),
            $this->t('Operations'),
        ],
        '#tabledrag' => [
            [
                'action' => 'order',
                'relationship' => 'sibling',
                'group' => 'image-effect-order-weight',
            ],
        ],
        '#attributes' => [
            'id' => 'image-style-effects',
        ],
        '#empty' => $this->t('There are currently no effects in this style. Add one by selecting an option below.'),
        // Render effects below parent elements.
'#weight' => 5,
    ];
    foreach ($this->entity
        ->getEffects() as $effect) {
        $key = $effect->getUuid();
        $form['effects'][$key]['#attributes']['class'][] = 'draggable';
        $form['effects'][$key]['#weight'] = isset($user_input['effects']) ? $user_input['effects'][$key]['weight'] : NULL;
        $form['effects'][$key]['effect'] = [
            '#tree' => FALSE,
            'data' => [
                'label' => [
                    '#plain_text' => $effect->label(),
                ],
            ],
        ];
        $summary = $effect->getSummary();
        if (!empty($summary)) {
            $summary['#prefix'] = ' ';
            $form['effects'][$key]['effect']['data']['summary'] = $summary;
        }
        $form['effects'][$key]['weight'] = [
            '#type' => 'weight',
            '#title' => $this->t('Weight for @title', [
                '@title' => $effect->label(),
            ]),
            '#title_display' => 'invisible',
            '#default_value' => $effect->getWeight(),
            '#attributes' => [
                'class' => [
                    'image-effect-order-weight',
                ],
            ],
        ];
        $links = [];
        $is_configurable = $effect instanceof ConfigurableImageEffectInterface;
        if ($is_configurable) {
            $links['edit'] = [
                'title' => $this->t('Edit'),
                'url' => Url::fromRoute('image.effect_edit_form', [
                    'image_style' => $this->entity
                        ->id(),
                    'image_effect' => $key,
                ]),
            ];
        }
        $links['delete'] = [
            'title' => $this->t('Delete'),
            'url' => Url::fromRoute('image.effect_delete', [
                'image_style' => $this->entity
                    ->id(),
                'image_effect' => $key,
            ]),
        ];
        $form['effects'][$key]['operations'] = [
            '#type' => 'operations',
            '#links' => $links,
        ];
    }
    // Build the new image effect addition form and add it to the effect list.
    $new_effect_options = [];
    $effects = $this->imageEffectManager
        ->getDefinitions();
    uasort($effects, function ($a, $b) {
        return Unicode::strcasecmp($a['label'], $b['label']);
    });
    foreach ($effects as $effect => $definition) {
        $new_effect_options[$effect] = $definition['label'];
    }
    $form['effects']['new'] = [
        '#tree' => FALSE,
        '#weight' => $user_input['weight'] ?? NULL,
        '#attributes' => [
            'class' => [
                'draggable',
            ],
        ],
    ];
    $form['effects']['new']['effect'] = [
        'data' => [
            'new' => [
                '#type' => 'select',
                '#title' => $this->t('Effect'),
                '#title_display' => 'invisible',
                '#options' => $new_effect_options,
                '#empty_option' => $this->t('Select a new effect'),
            ],
            [
                'add' => [
                    '#type' => 'submit',
                    '#value' => $this->t('Add'),
                    '#validate' => [
                        '::effectValidate',
                    ],
                    '#submit' => [
                        '::submitForm',
                        '::effectSave',
                    ],
                ],
            ],
        ],
        '#prefix' => '<div class="image-style-new">',
        '#suffix' => '</div>',
    ];
    $form['effects']['new']['weight'] = [
        '#type' => 'weight',
        '#title' => $this->t('Weight for new effect'),
        '#title_display' => 'invisible',
        '#default_value' => count($this->entity
            ->getEffects()) + 1,
        '#attributes' => [
            'class' => [
                'image-effect-order-weight',
            ],
        ],
    ];
    $form['effects']['new']['operations'] = [
        'data' => [],
    ];
    return parent::form($form, $form_state);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.