adaptivetheme-8.x-3.x-dev/at_core/forms/ext/images.php
at_core/forms/ext/images.php
<?php /** * @file * Generate form elements for the Image styles settings. */ // Breakpoints. $breakpoint_group_images = theme_get_setting('settings.breakpoint_group_images', $theme) ?: ''; if (empty($breakpoint_group_images)) { $breakpoint_group_images = theme_get_setting('settings.breakpoint_group_layout', $theme); } $image_breakpoints = $breakpoints[$breakpoint_group_images]; $image_alignment_options = [ 'none' => t('None'), 'left' => t('Left'), 'center' => t('Center'), 'right' => t('Right'), ]; $form['images'] = [ '#type' => 'details', '#title' => t('Image Field Settings'), '#group' => 'extension_settings', ]; $form['images']['image-settings'] = [ '#type' => 'fieldset', '#title' => t('Image Field Settings'), '#weight' => 0, ]; $form['images']['image-settings']['description'] = [ '#markup' => '<h3>Image Field Settings</h3><p>Set alignment, caption display and image count per entity type and view mode. Entity types Node, Comment, Custom Blocks and Paragraphs are supported.</p>', ]; // Breakpoint group. $form['images']['image-settings']['breakpoint_group'] = [ '#type' => 'fieldset', '#title' => t('Image Alignment Breakpoints'), '#description' => t('Select the breakpoint group. You must save the extension settings for it to take effect, then reconfigure image alignment for each breakpoint.'), ]; $form['images']['image-settings']['breakpoint_group']['settings_breakpoint_group_images'] = [ '#type' => 'select', '#options' => $breakpoint_options, '#title' => t('Breakpoint group'), '#default_value' => $breakpoint_group_images, ]; foreach ($breakpoints as $group_message_key => $group_message_values) { if ($group_message_values !== []) { foreach ($group_message_values as $breakpoint_message_key => $breakpoint_message_values) { $breakpoint_message[$group_message_key][] = '<dt>' . $breakpoint_message_values->getLabel() . ':</dt><dd>' . $breakpoint_message_values->getMediaQuery() . '</dd>'; } $form['images']['image-settings']['breakpoint_group'][$group_message_key]['bygroup_breakpoints'] = [ '#type' => 'container', '#markup' => '<dl class="breakpoint-group-values">' . implode("\n", $breakpoint_message[$group_message_key]) . '</dl>', '#states' => [ 'visible' => ['select[name="settings_breakpoint_group_images"]' => ['value' => $group_message_key]], ], ]; } } if (!empty($entity_types)) { foreach ($entity_types as $entity_type_key => $entity_type_values) { $form['images']['image-settings'][$entity_type_key] = [ '#type' => 'details', '#title' => t($entity_type_key), '#collapsed' => TRUE, ]; foreach ($entity_type_values as $evk => $etv) { if ($entity_type_key === 'paragraphs' || $entity_type_key === 'comment' || $entity_type_key === 'block_content') { $entity_type_id = $etv->id(); $entity_type_label = $etv->label(); } elseif ($entity_type_key === 'node') { $entity_type_id = $etv->get('type'); $entity_type_label = $etv->get('name'); } $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id] = [ '#type' => 'details', '#title' => t($entity_type_label), '#collapsed' => TRUE, '#attributes' => ['class' => ['image-alignment-entity-type-details']], ]; // Alignment settings. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'] = [ '#type' => 'details', '#title' => t('Alignment'), '#collapsed' => TRUE, '#description' => t('Set image field alignment per view mode and breakpoint.'), ]; if (!empty($image_breakpoints)) { foreach ($image_breakpoints as $image_breakpoint_id => $image_breakpoint_value) { $breakpoint_ia_label = $image_breakpoint_value->getLabel(); $breakpoint_ia_mediaquery = $image_breakpoint_value->getMediaQuery(); // There is probably a way to get the bp machine name but I could not find a method. $breakpoint_ia_key = strtolower(preg_replace("/\W|_/", "", $breakpoint_ia_label)); $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key] = [ '#type' => 'details', '#title' => t($breakpoint_ia_label . ' <small>' . $breakpoint_ia_mediaquery . '</small>'), '#attributes' => ['class' => ['clearfix', 'image-alignment-details']], ]; $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'] = [ '#type' => 'table', '#header' => [t('Display mode'), t('Align'), t('Margin (px)')], // '#header' => [t('Display mode'), t('Align'), t('Margin')], '#empty' => t('No view modes to display'), '#attributes' => ['class' => ['image-align-options-table']], ]; foreach ($view_modes[$entity_type_key] as $display_mode) { // View mode labels. $display_mode_label = t('Display mode: ') . $display_mode['label']; $display_mode_id = str_replace('.', '_', $display_mode['id']); // We need BC. Set all breakpoints to use the old settings unless the // new setting is isset... $old_setting = theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $display_mode_id); $new_setting = theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id); if (isset($new_setting)) { $setting = $new_setting; } else { $setting = $old_setting; } // View mode. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['view_mode'] = [ '#type' => 'container', '#markup' => '<span>' . $display_mode['label'] . '</span>', ]; // Align options. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['options']['settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id] = [ '#type' => 'radios', '#default_value' => $setting, '#options' => $image_alignment_options, '#attributes' => ['class' => ['clearfix']], ]; // Margins. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['margins']['settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_top'] = [ '#type' => 'number', '#title' => t('Top'), // '#field_suffix' => 'px <small>(coverts to em)</small>', '#default_value' => theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_top') ?: 0, '#attributes' => [ 'min' => 0, 'max' => 999, 'step' => 1, 'class' => ['margin-option'] ], ]; $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['margins']['settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_right'] = [ '#type' => 'number', '#title' => t('Right'), '#default_value' => theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_right') ?: 0, '#attributes' => [ 'min' => 0, 'max' => 999, 'step' => 1, 'class' => ['margin-option'] ], '#states' => [ '!visible' => ['input[name="table_image_align[' . $display_mode_id . '][options][settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . ']' => ['checked' => TRUE, 'value' => 'center']], ], ]; $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['margins']['settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_bottom'] = [ '#type' => 'number', '#title' => t('Bottom'), // '#field_suffix' => 'px <small>(coverts to em)</small>', '#default_value' => theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_bottom') ?: 0, '#attributes' => [ 'min' => 0, 'max' => 999, 'step' => 1, 'class' => ['margin-option'] ], ]; $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['alignment'][$breakpoint_ia_key]['table_image_align'][$display_mode_id]['margins']['settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_left'] = [ '#type' => 'number', '#title' => t('Left'), // '#field_suffix' => 'px <small>(coverts to em)</small>', '#default_value' => theme_get_setting('settings.image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . '_left') ?: 0, '#attributes' => [ 'min' => 0, 'max' => 999, 'step' => 1, 'class' => ['margin-option'] ], '#states' => [ '!visible' => ['input[name="table_image_align[' . $display_mode_id . '][options][settings_image_alignment_' . $entity_type_id . '_' . $breakpoint_ia_key . '_' . $display_mode_id . ']' => ['checked' => TRUE, 'value' => 'center']], ], ]; } } } // Caption setting. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['captions'] = [ '#type' => 'details', '#title' => t('Captions'), '#collapsed' => TRUE, '#description' => t('Show captions per display mode. Captions use the "Title" option and must be enabled in the image field settings.'), ]; foreach ($view_modes[$entity_type_key] as $display_mode) { // View mode labels. $display_mode_label = $display_mode['label']; $display_mode_id = str_replace('.', '_', $display_mode['id']); $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['captions'][$display_mode_id]['settings_image_captions_' . $entity_type_id . '_' . $display_mode_id] = [ '#type' => 'checkbox', '#title' => $display_mode_label, '#default_value' => theme_get_setting('settings.image_captions_' . $entity_type_id . '_' . $display_mode_id), ]; } // Image count settings. $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['count'] = [ '#type' => 'details', '#title' => t('Image Count'), '#collapsed' => TRUE, '#description' => t('Restrict to <b>one image</b> only in certain display modes - useful for teaser mode when you have multi-value or unlimited images.'), ]; foreach ($view_modes[$entity_type_key] as $display_mode) { // View mode labels. $display_mode_label = $display_mode['label']; $display_mode_id = str_replace('.', '_', $display_mode['id']); $form['images']['image-settings'][$entity_type_key][$entity_type_id]['entity_type_' . $entity_type_id]['count'][$display_mode_id]['settings_image_count_' . $entity_type_id . '_' . $display_mode_id] = [ '#type' => 'checkbox', '#title' => $display_mode_label, '#default_value' => theme_get_setting('settings.image_count_' . $entity_type_id . '_' . $display_mode_id), ]; } } } }