View source
<?php
namespace Drupal\pagerer\Form;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;
use Drupal\Core\Ajax\ReplaceCommand;
use Drupal\Core\Form\FormStateInterface;
class PagererPresetEditForm extends PagererPresetFormBase {
public function form(array $form, FormStateInterface $form_state) {
$form = parent::form($form, $form_state);
$this->pagerManager
->createPager(47884, 50);
$form['#attached']['library'][] = 'pagerer/admin.ui';
if ($form_state
->getValues()) {
foreach ([
'left',
'center',
'right',
] as $pane) {
$this->entity
->setPaneData($pane, 'style', $form_state
->getUserInput()['panes_container'][$pane]['style']);
}
}
$form['#title'] = $this
->t("Edit pager %preset_label", [
'%preset_label' => $this->entity
->label(),
]);
$form['ajax_messages'] = [
'#type' => 'container',
'#attributes' => [
'id' => 'pagerer-ajax-messages',
],
];
$options = [
'none' => $this
->t('- None -'),
] + $this->styleManager
->getPluginOptions('base');
$form['panes_container'] = [
'#type' => 'fieldset',
'#title' => $this
->t("Panes configuration"),
'#description' => $this
->t("Click 'Configure' to change style settings. Click 'Reset' to reset a pane configuration to its style's default."),
'#tree' => TRUE,
];
foreach ([
'left',
'center',
'right',
] as $pane) {
switch ($pane) {
case 'left':
$title = $this
->t("Left pane");
break;
case 'center':
$title = $this
->t("Center pane");
break;
case 'right':
$title = $this
->t("Right pane");
break;
}
$form['panes_container'][$pane] = [
'#type' => 'fieldset',
'#title' => $title,
'#attributes' => [
'class' => [
'pagerer-panes-container-pane',
],
],
'style' => [
'#type' => 'select',
'#title' => $this
->t("Style"),
'#options' => $options,
'#default_value' => $this->entity
->getPaneData($pane, 'style'),
'#ajax' => [
'callback' => '::processStyleChange',
],
],
'actions' => [
'#type' => 'actions',
'configure' => [
'#type' => 'submit',
'#name' => 'config_' . $pane,
'#value' => $this
->t("Configure"),
'#submit' => [
'::submitForm',
'::save',
],
],
'reset' => [
'#type' => 'submit',
'#name' => 'reset_' . $pane,
'#value' => $this
->t("Reset"),
'#submit' => [
'::submitForm',
'::save',
],
],
],
];
}
$form['preview'] = [
'#type' => 'fieldset',
'#title' => $this
->t("Pager preview"),
'#id' => 'pagerer-pager-preview',
];
$form['preview']['pagerer'] = [
'#type' => 'pager',
'#theme' => 'pagerer',
'#config' => [
'panes' => [
'left' => $this->entity
->getPaneData('left'),
'center' => $this->entity
->getPaneData('center'),
'right' => $this->entity
->getPaneData('right'),
],
],
];
return $form;
}
public function processStyleChange($form, FormStateInterface $form_state) {
$this->messenger
->addMessage($this
->t('Click on the <em>Save</em> button to confirm the selection.'), 'warning');
$response = new AjaxResponse();
$status_messages = [
'#type' => 'status_messages',
];
$response
->addCommand(new HtmlCommand('#pagerer-ajax-messages', $status_messages));
$response
->addCommand(new ReplaceCommand('#pagerer-pager-preview', $form['preview']));
return $response;
}
public function validateForm(array &$form, FormStateInterface $form_state) {
if (strpos($form_state
->getTriggeringElement()['#name'], 'config', 0) === 0) {
$e = explode('_', $form_state
->getTriggeringElement()['#name']);
$pane = $e[1];
if ($form_state
->getValue([
'panes_container',
$pane,
'style',
]) == 'none') {
$form_state
->setErrorByName('panes_container][' . $pane . '][style', $this
->t("Select a style before clicking 'Configure'."));
}
}
if (strpos($form_state
->getTriggeringElement()['#name'], 'reset', 0) === 0) {
$e = explode('_', $form_state
->getTriggeringElement()['#name']);
$pane = $e[1];
if ($form_state
->getValue([
'panes_container',
$pane,
'style',
]) == 'none') {
$form_state
->setErrorByName('panes_container][' . $pane . '][style', $this
->t("Select a style before clicking 'Reset'."));
}
}
}
public function submitForm(array &$form, FormStateInterface $form_state) {
foreach ([
'left',
'center',
'right',
] as $pane) {
$this->entity
->setPaneData($pane, 'style', $form_state
->getValue([
'panes_container',
$pane,
'style',
]));
}
parent::submitForm($form, $form_state);
$form_state
->setRedirect('entity.pagerer_preset.collection');
}
public function save(array $form, FormStateInterface $form_state) {
parent::save($form, $form_state);
$trigger = $form_state
->getTriggeringElement()['#name'];
if (strpos($trigger, 'config', 0) === 0) {
$e = explode('_', $trigger);
$pane = $e[1];
$form_state
->setRedirect('entity.pagerer_preset.pane_edit_form', [
'pagerer_preset' => $this->entity
->id(),
'pane' => $pane,
]);
}
elseif (strpos($trigger, 'reset', 0) === 0) {
$e = explode('_', $trigger);
$pane = $e[1];
$form_state
->setRedirect('entity.pagerer_preset.pane_reset_form', [
'pagerer_preset' => $this->entity
->id(),
'pane' => $pane,
]);
}
else {
$this->messenger
->addMessage($this
->t('Changes to the pager %label have been saved.', [
'%label' => $this->entity
->label(),
]));
}
}
}