Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 10  | 
      CRAP |         | 
      0.00%  | 
      0 / 180  | 
     
| ImageStyleEditForm |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 10  | 
      506 |         | 
      0.00%  | 
      0 / 180  | 
     
| __construct |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| create |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| form |         | 
      0.00%  | 
      0 / 1  | 
      56 |         | 
      0.00%  | 
      0 / 82  | 
     |||
| anonymous function |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| effectValidate |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| effectSave |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 25  | 
     |||
| submitForm |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| save |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| actions |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 4  | 
     |||
| updateEffectWeights |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 6  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\image\Form\ImageStyleEditForm. | |
| */ | |
| namespace Drupal\image\Form; | |
| use Drupal\Core\Entity\EntityStorageInterface; | |
| use Drupal\Core\Form\FormStateInterface; | |
| use Drupal\Core\Url; | |
| use Drupal\image\ConfigurableImageEffectInterface; | |
| use Drupal\image\ImageEffectManager; | |
| use Symfony\Component\DependencyInjection\ContainerInterface; | |
| /** | |
| * Controller for image style edit form. | |
| */ | |
| class ImageStyleEditForm extends ImageStyleFormBase { | |
| /** | |
| * The image effect manager service. | |
| * | |
| * @var \Drupal\image\ImageEffectManager | |
| */ | |
| protected $imageEffectManager; | |
| /** | |
| * Constructs an ImageStyleEditForm object. | |
| * | |
| * @param \Drupal\Core\Entity\EntityStorageInterface $image_style_storage | |
| * The storage. | |
| * @param \Drupal\image\ImageEffectManager $image_effect_manager | |
| * The image effect manager service. | |
| */ | |
| public function __construct(EntityStorageInterface $image_style_storage, ImageEffectManager $image_effect_manager) { | |
| parent::__construct($image_style_storage); | |
| $this->imageEffectManager = $image_effect_manager; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function create(ContainerInterface $container) { | |
| return new static( | |
| $container->get('entity.manager')->getStorage('image_style'), | |
| $container->get('plugin.manager.image.effect') | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function form(array $form, FormStateInterface $form_state) { | |
| $user_input = $form_state->getUserInput(); | |
| $form['#title'] = $this->t('Edit style %name', array('%name' => $this->entity->label())); | |
| $form['#tree'] = TRUE; | |
| $form['#attached']['library'][] = 'image/admin'; | |
| // Show the thumbnail preview. | |
| $preview_arguments = array('#theme' => 'image_style_preview', '#style' => $this->entity); | |
| $form['preview'] = array( | |
| '#type' => 'item', | |
| '#title' => $this->t('Preview'), | |
| '#markup' => drupal_render($preview_arguments), | |
| // Render preview above parent elements. | |
| '#weight' => -5, | |
| ); | |
| // Build the list of existing image effects for this image style. | |
| $form['effects'] = array( | |
| '#type' => 'table', | |
| '#header' => array( | |
| $this->t('Effect'), | |
| $this->t('Weight'), | |
| $this->t('Operations'), | |
| ), | |
| '#tabledrag' => array( | |
| array( | |
| 'action' => 'order', | |
| 'relationship' => 'sibling', | |
| 'group' => 'image-effect-order-weight', | |
| ), | |
| ), | |
| '#attributes' => array( | |
| 'id' => 'image-style-effects', | |
| ), | |
| '#empty' => 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'] = array( | |
| '#tree' => FALSE, | |
| 'data' => array( | |
| 'label' => array( | |
| '#plain_text' => $effect->label(), | |
| ), | |
| ), | |
| ); | |
| $summary = $effect->getSummary(); | |
| if (!empty($summary)) { | |
| $summary['#prefix'] = ' '; | |
| $form['effects'][$key]['effect']['data']['summary'] = $summary; | |
| } | |
| $form['effects'][$key]['weight'] = array( | |
| '#type' => 'weight', | |
| '#title' => $this->t('Weight for @title', array('@title' => $effect->label())), | |
| '#title_display' => 'invisible', | |
| '#default_value' => $effect->getWeight(), | |
| '#attributes' => array( | |
| 'class' => array('image-effect-order-weight'), | |
| ), | |
| ); | |
| $links = array(); | |
| $is_configurable = $effect instanceof ConfigurableImageEffectInterface; | |
| if ($is_configurable) { | |
| $links['edit'] = array( | |
| 'title' => $this->t('Edit'), | |
| 'url' => Url::fromRoute('image.effect_edit_form', [ | |
| 'image_style' => $this->entity->id(), | |
| 'image_effect' => $key, | |
| ]), | |
| ); | |
| } | |
| $links['delete'] = array( | |
| 'title' => $this->t('Delete'), | |
| 'url' => Url::fromRoute('image.effect_delete', [ | |
| 'image_style' => $this->entity->id(), | |
| 'image_effect' => $key, | |
| ]), | |
| ); | |
| $form['effects'][$key]['operations'] = array( | |
| '#type' => 'operations', | |
| '#links' => $links, | |
| ); | |
| } | |
| // Build the new image effect addition form and add it to the effect list. | |
| $new_effect_options = array(); | |
| $effects = $this->imageEffectManager->getDefinitions(); | |
| uasort($effects, function ($a, $b) { | |
| return strcasecmp($a['id'], $b['id']); | |
| }); | |
| foreach ($effects as $effect => $definition) { | |
| $new_effect_options[$effect] = $definition['label']; | |
| } | |
| $form['effects']['new'] = array( | |
| '#tree' => FALSE, | |
| '#weight' => isset($user_input['weight']) ? $user_input['weight'] : NULL, | |
| '#attributes' => array('class' => array('draggable')), | |
| ); | |
| $form['effects']['new']['effect'] = array( | |
| 'data' => array( | |
| 'new' => array( | |
| '#type' => 'select', | |
| '#title' => $this->t('Effect'), | |
| '#title_display' => 'invisible', | |
| '#options' => $new_effect_options, | |
| '#empty_option' => $this->t('Select a new effect'), | |
| ), | |
| array( | |
| 'add' => array( | |
| '#type' => 'submit', | |
| '#value' => $this->t('Add'), | |
| '#validate' => array('::effectValidate'), | |
| '#submit' => array('::submitForm', '::effectSave'), | |
| ), | |
| ), | |
| ), | |
| '#prefix' => '<div class="image-style-new">', | |
| '#suffix' => '</div>', | |
| ); | |
| $form['effects']['new']['weight'] = array( | |
| '#type' => 'weight', | |
| '#title' => $this->t('Weight for new effect'), | |
| '#title_display' => 'invisible', | |
| '#default_value' => count($this->entity->getEffects()) + 1, | |
| '#attributes' => array('class' => array('image-effect-order-weight')), | |
| ); | |
| $form['effects']['new']['operations'] = array( | |
| 'data' => array(), | |
| ); | |
| return parent::form($form, $form_state); | |
| } | |
| /** | |
| * Validate handler for image effect. | |
| */ | |
| public function effectValidate($form, FormStateInterface $form_state) { | |
| if (!$form_state->getValue('new')) { | |
| $form_state->setErrorByName('new', $this->t('Select an effect to add.')); | |
| } | |
| } | |
| /** | |
| * Submit handler for image effect. | |
| */ | |
| public function effectSave($form, FormStateInterface $form_state) { | |
| $this->save($form, $form_state); | |
| // Check if this field has any configuration options. | |
| $effect = $this->imageEffectManager->getDefinition($form_state->getValue('new')); | |
| // Load the configuration form for this option. | |
| if (is_subclass_of($effect['class'], '\Drupal\image\ConfigurableImageEffectInterface')) { | |
| $form_state->setRedirect( | |
| 'image.effect_add_form', | |
| array( | |
| 'image_style' => $this->entity->id(), | |
| 'image_effect' => $form_state->getValue('new'), | |
| ), | |
| array('query' => array('weight' => $form_state->getValue('weight'))) | |
| ); | |
| } | |
| // If there's no form, immediately add the image effect. | |
| else { | |
| $effect = array( | |
| 'id' => $effect['id'], | |
| 'data' => array(), | |
| 'weight' => $form_state->getValue('weight'), | |
| ); | |
| $effect_id = $this->entity->addImageEffect($effect); | |
| $this->entity->save(); | |
| if (!empty($effect_id)) { | |
| drupal_set_message($this->t('The image effect was successfully applied.')); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function submitForm(array &$form, FormStateInterface $form_state) { | |
| // Update image effect weights. | |
| if (!$form_state->isValueEmpty('effects')) { | |
| $this->updateEffectWeights($form_state->getValue('effects')); | |
| } | |
| parent::submitForm($form, $form_state); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function save(array $form, FormStateInterface $form_state) { | |
| parent::save($form, $form_state); | |
| drupal_set_message($this->t('Changes to the style have been saved.')); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function actions(array $form, FormStateInterface $form_state) { | |
| $actions = parent::actions($form, $form_state); | |
| $actions['submit']['#value'] = $this->t('Update style'); | |
| return $actions; | |
| } | |
| /** | |
| * Updates image effect weights. | |
| * | |
| * @param array $effects | |
| * Associative array with effects having effect uuid as keys and array | |
| * with effect data as values. | |
| */ | |
| protected function updateEffectWeights(array $effects) { | |
| foreach ($effects as $uuid => $effect_data) { | |
| if ($this->entity->getEffects()->has($uuid)) { | |
| $this->entity->getEffect($uuid)->setWeight($effect_data['weight']); | |
| } | |
| } | |
| } | |
| } |