book-2.0.x-dev/src/Form/BookSettingsForm.php
src/Form/BookSettingsForm.php
<?php
namespace Drupal\book\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\ConfigTarget;
use Drupal\Core\Form\FormStateInterface;
/**
* Configure book settings for this site.
*
* @internal
*/
class BookSettingsForm extends ConfigFormBase {
/**
* {@inheritdoc}
*/
public function getFormId(): string {
return 'book_admin_settings';
}
/**
* {@inheritdoc}
*/
protected function getEditableConfigNames(): array {
return ['book.settings'];
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
$config = $this->config('book.settings');
$types = node_type_get_names();
$form['book_allowed_types'] = [
'#type' => 'checkboxes',
'#title' => $this->t('Content types allowed in book outlines'),
'#config_target' => new ConfigTarget('book.settings', 'allowed_types', toConfig: static::class . '::filterAndSortAllowedTypes'),
'#options' => $types,
'#description' => $this->t('Users with the %outline-perm permission can add all content types.', ['%outline-perm' => $this->t('Add non-book content to outlines')]),
'#required' => FALSE,
];
$form['book_child_type'] = [
'#type' => 'radios',
'#title' => $this->t('Content type for the <em>Add child page</em> link'),
'#config_target' => 'book.settings:child_type',
'#options' => $types,
'#required' => FALSE,
];
$form['book_sort'] = [
'#type' => 'radios',
'#title' => $this->t('Book list sorting for administrative pages, outlines, and menus'),
'#default_value' => $config->get('book_sort'),
'#config_target' => 'book.settings:book_sort',
'#options' => [
'weight' => 'Sort by weight',
'title' => 'Sort alphabetically by title',
],
'#required' => TRUE,
];
return parent::buildForm($form, $form_state);
}
/**
* Transformation callback for the book_allowed_types config value.
*
* @param array $allowed_types
* The config value to transform.
*
* @return array
* The transformed value.
*/
public static function filterAndSortAllowedTypes(array $allowed_types): array {
$allowed_types = array_filter($allowed_types);
// We need to save the allowed types in an array ordered by machine_name so
// that we can save them in the correct order if node type changes.
// @see book_node_type_update().
sort($allowed_types);
return $allowed_types;
}
}
