Newer
Older
use Drupal\Core\Form\FormStateInterface;
/**
* General configuration form for controlling the colorbox behaviour..
*/
class ColorboxSettingsForm extends ConfigFormBase {
Sam Becker
committed
/**
* A state that represents the custom settings being enabled.
*/
const STATE_CUSTOM_SETTINGS = 0;
/**
* A state that represents the slideshow being enabled.
*/
const STATE_SLIDESHOW_ENABLED = 1;
Carlos E Basqueira
committed
public function getFormId() {
return 'colorbox_admin_settings_form';
Carlos E Basqueira
committed
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames() {
Carlos E Basqueira
committed
return ['colorbox.settings'];
public function buildForm(array $form, FormStateInterface $form_state) {
Sam Becker
committed
$config = $this->configFactory->get('colorbox.settings');
MUNAVIJAYALAKSHMI P
committed
$form['colorbox_custom_settings'] = [
'#type' => 'details',
Chandan Chaudhary
committed
'#title' => $this->t('Styles and options'),
MUNAVIJAYALAKSHMI P
committed
];
$colorbox_styles = [
Chandan Chaudhary
committed
'default' => $this->t('Default'),
'plain' => $this->t('Plain (mainly for images)'),
'stockholmsyndrome' => $this->t('Stockholm Syndrome'),
'example1' => $this->t('Example 1'),
'example2' => $this->t('Example 2'),
'example3' => $this->t('Example 3'),
'example4' => $this->t('Example 4'),
'example5' => $this->t('Example 5'),
'none' => $this->t('None'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_style'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Style'),
'#options' => $colorbox_styles,
'#default_value' => $config->get('custom.style'),
Chandan Chaudhary
committed
'#description' => $this->t('Select the style to use for the Colorbox. The example styles are the ones that come with the Colorbox plugin. Select "None" if you have added Colorbox styles to your theme.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_custom_settings_activate'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Options'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [0 => $this->t('Default'), 1 => $this->t('Custom')],
'#default_value' => $config->get('custom.activate'),
Chandan Chaudhary
committed
'#description' => $this->t('Use the default or custom options for Colorbox.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_transition_type'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Transition type'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [
Carlos E Basqueira
committed
'elastic' => $this->t('Elastic'),
'fade' => $this->t('Fade'),
'none' => $this->t('None'),
MUNAVIJAYALAKSHMI P
committed
],
'#default_value' => $config->get('custom.transition_type'),
Chandan Chaudhary
committed
'#description' => $this->t('The transition type.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_transition_speed'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Transition speed'),
Sam Becker
committed
'#options' => $this->optionsRange(100, 600, 50),
'#default_value' => $config->get('custom.transition_speed'),
Chandan Chaudhary
committed
'#description' => $this->t('Sets the speed of the fade and elastic transitions, in milliseconds.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_opacity'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Opacity'),
Sam Becker
committed
'#options' => $this->optionsRange(0, 1, 0.05),
'#default_value' => $config->get('custom.opacity'),
Chandan Chaudhary
committed
'#description' => $this->t('The overlay opacity level. Range: 0 to 1.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_text_current'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Current'),
'#default_value' => $config->get('custom.text_current'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text format for the content group / gallery count. {current} and {total} are detected and replaced with actual numbers while Colorbox runs.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_text_previous'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Previous'),
'#default_value' => $config->get('custom.text_previous'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text for the previous button in a shared relation group.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_text_next'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Next'),
'#default_value' => $config->get('custom.text_next'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text for the next button in a shared relation group.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_text_close'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Close'),
'#default_value' => $config->get('custom.text_close'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text for the close button. The "Esc" key will also close Colorbox.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_maxwidth'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Max width'),
'#default_value' => $config->get('custom.maxwidth'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Set a maximum width for loaded content. Example: "100%", 500, "500px".'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_maxheight'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Max height'),
'#default_value' => $config->get('custom.maxheight'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Set a maximum height for loaded content. Example: "100%", 500, "500px".'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_initialwidth'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Initial width'),
'#default_value' => $config->get('custom.initialwidth'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Set the initial width, prior to any content being loaded. Example: "100%", 500, "500px".'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_initialheight'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Initial height'),
'#default_value' => $config->get('custom.initialheight'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Set the initial height, prior to any content being loaded. Example: "100%", 500, "500px".'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_overlayclose'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Overlay close'),
'#default_value' => $config->get('custom.overlayclose'),
Chandan Chaudhary
committed
'#description' => $this->t('Enable closing Colorbox by clicking on the background overlay.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_returnfocus'] = [
'#type' => 'checkbox',
'#title' => $this->t('Return focus'),
'#default_value' => $config->get('custom.returnfocus'),
'#description' => $this->t('Return focus when Colorbox exits to the element it was launched from.'),
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_fixed'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Fixed'),
'#default_value' => $config->get('custom.fixed'),
Carlos E Basqueira
committed
'#description' => $this->t("If the Colorbox should be displayed in a fixed position within the visitor's viewport or relative to the document."),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_scrolling'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Scrollbars'),
'#default_value' => $config->get('custom.scrolling'),
Chandan Chaudhary
committed
'#description' => $this->t('If unchecked, Colorbox will hide scrollbars for overflowing content. This could be used on conjunction with the resize method for a smoother transition if you are appending content to an already open instance of Colorbox.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
MUNAVIJAYALAKSHMI P
committed
$form['colorbox_custom_settings']['colorbox_slideshow_settings'] = [
'#type' => 'details',
Chandan Chaudhary
committed
'#title' => $this->t('Slideshow settings'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
Sam Becker
committed
'#states' => $this->getState(static::STATE_CUSTOM_SETTINGS),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_slideshow_settings']['colorbox_slideshow'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Slideshow'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [0 => $this->t('Off'), 1 => $this->t('On')],
'#default_value' => $config->get('custom.slideshow.slideshow'),
Chandan Chaudhary
committed
'#description' => $this->t('An automatic slideshow to a content group / gallery.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_slideshow_settings']['colorbox_slideshowauto'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Slideshow autostart'),
'#default_value' => $config->get('custom.slideshow.auto'),
Chandan Chaudhary
committed
'#description' => $this->t('If the slideshow should automatically start to play.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_SLIDESHOW_ENABLED),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_slideshow_settings']['colorbox_slideshowspeed'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Slideshow speed'),
Sam Becker
committed
'#options' => $this->optionsRange(1000, 6000, 500),
'#default_value' => $config->get('custom.slideshow.speed'),
Chandan Chaudhary
committed
'#description' => $this->t('Sets the speed of the slideshow, in milliseconds.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_SLIDESHOW_ENABLED),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_slideshow_settings']['colorbox_text_start'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Start slideshow'),
'#default_value' => $config->get('custom.slideshow.text_start'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text for the slideshow start button.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_SLIDESHOW_ENABLED),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_custom_settings']['colorbox_slideshow_settings']['colorbox_text_stop'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Stop slideshow'),
'#default_value' => $config->get('custom.slideshow.text_stop'),
'#size' => 30,
Chandan Chaudhary
committed
'#description' => $this->t('Text for the slideshow stop button.'),
Sam Becker
committed
'#states' => $this->getState(static::STATE_SLIDESHOW_ENABLED),
MUNAVIJAYALAKSHMI P
committed
];
MUNAVIJAYALAKSHMI P
committed
$form['colorbox_advanced_settings'] = [
'#type' => 'details',
Chandan Chaudhary
committed
'#title' => $this->t('Advanced settings'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_advanced_settings']['colorbox_unique_token'] = [
'#type' => 'radios',
Chandan Chaudhary
committed
'#title' => $this->t('Unique per-request gallery token'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [1 => $this->t('On'), 0 => $this->t('Off')],
'#default_value' => $config->get('advanced.unique_token'),
Chandan Chaudhary
committed
'#description' => $this->t('If On (default), Colorbox will add a unique per-request token to the gallery id to avoid images being added manually to galleries. The token was added as a security fix but some see the old behavoiur as an feature and this settings makes it possible to remove the token.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_advanced_settings']['colorbox_mobile_detect'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Mobile detection'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [1 => $this->t('On'), 0 => $this->t('Off')],
'#default_value' => $config->get('advanced.mobile_detect'),
'#description' => $this->t('If on (default) Colorbox will not be active for devices with the max width set below.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_advanced_settings']['colorbox_mobile_device_width'] = [
'#title' => $this->t('Device width'),
'#default_value' => $config->get('advanced.mobile_device_width'),
'#size' => 30,
'#description' => $this->t('Set the mobile device max width. Default: 480px.'),
MUNAVIJAYALAKSHMI P
committed
'#states' => [
'visible' => [
':input[name="colorbox_mobile_detect"]' => ['value' => '1'],
],
],
];
$form['colorbox_advanced_settings']['colorbox_caption_trim'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Caption shortening'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [0 => $this->t('Default'), 1 => $this->t('Yes')],
'#default_value' => $config->get('advanced.caption_trim'),
Chandan Chaudhary
committed
'#description' => $this->t('If the caption should be made shorter in the Colorbox to avoid layout problems. The default is to shorten for the example styles, they need it, but not for other styles.'),
MUNAVIJAYALAKSHMI P
committed
];
$form['colorbox_advanced_settings']['colorbox_caption_trim_length'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Caption max length'),
Sam Becker
committed
'#options' => $this->optionsRange(40, 120, 5),
'#default_value' => $config->get('advanced.caption_trim_length'),
MUNAVIJAYALAKSHMI P
committed
'#states' => [
'visible' => [
':input[name="colorbox_caption_trim"]' => ['value' => '1'],
],
],
];
$form['colorbox_advanced_settings']['colorbox_compression_type'] = [
Chandan Chaudhary
committed
'#title' => $this->t('Choose Colorbox compression level'),
MUNAVIJAYALAKSHMI P
committed
'#options' => [
Chandan Chaudhary
committed
'minified' => $this->t('Production (Minified)'),
'source' => $this->t('Development (Uncompressed Code)'),
MUNAVIJAYALAKSHMI P
committed
],
'#default_value' => $config->get('advanced.compression_type'),
MUNAVIJAYALAKSHMI P
committed
];
return parent::buildForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this->configFactory->getEditable('colorbox.settings');
Carlos E Basqueira
committed
->set('custom.style', $form_state->getValue('colorbox_style'))
->set('custom.activate', $form_state->getValue('colorbox_custom_settings_activate'))
->set('custom.transition_type', $form_state->getValue('colorbox_transition_type'))
->set('custom.transition_speed', $form_state->getValue('colorbox_transition_speed'))
->set('custom.opacity', $form_state->getValue('colorbox_opacity'))
->set('custom.text_current', $form_state->getValue('colorbox_text_current'))
->set('custom.text_previous', $form_state->getValue('colorbox_text_previous'))
->set('custom.text_next', $form_state->getValue('colorbox_text_next'))
->set('custom.text_close', $form_state->getValue('colorbox_text_close'))
->set('custom.overlayclose', $form_state->getValue('colorbox_overlayclose'))
->set('custom.returnfocus', $form_state->getValue('colorbox_returnfocus'))
->set('custom.maxwidth', $form_state->getValue('colorbox_maxwidth'))
->set('custom.maxheight', $form_state->getValue('colorbox_maxheight'))
->set('custom.initialwidth', $form_state->getValue('colorbox_initialwidth'))
->set('custom.initialheight', $form_state->getValue('colorbox_initialheight'))
->set('custom.fixed', $form_state->getValue('colorbox_fixed'))
->set('custom.scrolling', $form_state->getValue('colorbox_scrolling'))
->set('custom.slideshow.slideshow', $form_state->getValue('colorbox_slideshow'))
->set('custom.slideshow.auto', $form_state->getValue('colorbox_slideshowauto'))
->set('custom.slideshow.speed', $form_state->getValue('colorbox_slideshowspeed'))
->set('custom.slideshow.text_start', $form_state->getValue('colorbox_text_start'))
->set('custom.slideshow.text_stop', $form_state->getValue('colorbox_text_stop'))
->set('advanced.unique_token', $form_state->getValue('colorbox_unique_token'))
->set('advanced.mobile_detect', $form_state->getValue('colorbox_mobile_detect'))
->set('advanced.mobile_device_width', $form_state->getValue('colorbox_mobile_device_width'))
->set('advanced.caption_trim', $form_state->getValue('colorbox_caption_trim'))
->set('advanced.caption_trim_length', $form_state->getValue('colorbox_caption_trim_length'))
->set('advanced.compression_type', $form_state->getValue('colorbox_compression_type'));
if ($form_state->getValue('colorbox_image_style')) {
$config->set('insert.image_style', $form_state->getValue('colorbox_image_style'));
if ($form_state->getValue('colorbox_insert_gallery')) {
$config->set('insert.insert_gallery', $form_state->getValue('colorbox_insert_gallery'));
}
$config->save();
parent::submitForm($form, $form_state);
}
Sam Becker
committed
/**
* Get one of the pre-defined states used in this form.
*
* @param string $state
* The state to get that matches one of the state class constants.
*
* @return array
* A corresponding form API state.
*/
protected function getState($state) {
$states = [
static::STATE_CUSTOM_SETTINGS => [
'visible' => [
':input[name="colorbox_custom_settings_activate"]' => ['value' => '1'],
],
],
static::STATE_SLIDESHOW_ENABLED => [
'visible' => [
Carlos E Basqueira
committed
':input[name="colorbox_slideshow"]' => ['value' => '1'],
Sam Becker
committed
],
],
];
return $states[$state];
}
Sam Becker
committed
/**
* Create a range for a series of options.
*
Carlos E Basqueira
committed
* @param int $start
Sam Becker
committed
* The start of the range.
Carlos E Basqueira
committed
* @param int $end
Sam Becker
committed
* The end of the range.
Carlos E Basqueira
committed
* @param int $step
Sam Becker
committed
* The interval between elements.
*
* @return array
* An options array for the given range.
*/
protected function optionsRange($start, $end, $step) {
$range = range($start, $end, $step);
return array_combine($range, $range);
}