View source
<?php
namespace Drupal\social_tagging\Form;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\node\Entity\NodeType;
use Symfony\Component\DependencyInjection\ContainerInterface;
class SocialTaggingSettingsForm extends ConfigFormBase implements ContainerInjectionInterface {
protected $moduleHandler;
public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $moduleHandler) {
parent::__construct($config_factory);
$this->moduleHandler = $moduleHandler;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('module_handler'));
}
public function getFormId() {
return 'social_tagging_settings';
}
protected function getEditableConfigNames() {
return [
'social_tagging.settings',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this
->config('social_tagging.settings');
$content_types = [];
foreach (NodeType::loadMultiple() as $node_type) {
$content_types[] = $node_type
->get('name');
}
$form['enable_content_tagging'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Allow users to tag content in content.'),
'#default_value' => $config
->get('enable_content_tagging'),
'#required' => FALSE,
'#description' => $this
->t("Determine whether users are allowed to tag content, view tags and filter on tags in content. (@content)", [
'@content' => implode(', ', $content_types),
]),
];
$form['allow_category_split'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Allow category split.'),
'#default_value' => $config
->get('allow_category_split'),
'#required' => FALSE,
'#description' => $this
->t("Determine if the main categories of the vocabury will be used as seperate tag fields or as a single tag field when using tags on content."),
];
$form['node_type_settings'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Type configuration'),
];
$form['node_type_settings']['tag_type_group'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Group'),
'#default_value' => $config
->get('tag_type_group'),
'#required' => FALSE,
];
foreach (NodeType::loadMultiple() as $nodetype) {
$field_name = 'tag_node_type_' . $nodetype
->id();
$value = $config
->get($field_name);
$default_value = isset($value) ? $config
->get($field_name) : TRUE;
$form['node_type_settings'][$field_name] = [
'#type' => 'checkbox',
'#title' => $nodetype
->label(),
'#default_value' => $default_value,
'#required' => FALSE,
];
}
$form['some_text_field']['#markup'] = '<p><strong>' . Link::createFromRoute($this
->t('Click here to go to the social tagging overview'), 'entity.taxonomy_vocabulary.overview_form', [
'taxonomy_vocabulary' => 'social_tagging',
])
->toString() . '</strong></p>';
return parent::buildForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$config = $this
->config('social_tagging.settings');
$config
->set('enable_content_tagging', $form_state
->getValue('enable_content_tagging'))
->save();
$config
->set('allow_category_split', $form_state
->getValue('allow_category_split'))
->save();
$config
->set('tag_type_group', $form_state
->getValue('tag_type_group'))
->save();
foreach (NodeType::loadMultiple() as $nodetype) {
$config_name = 'tag_node_type_' . $nodetype
->id();
$config
->set($config_name, $form_state
->getValue($config_name))
->save();
}
parent::submitForm($form, $form_state);
}
}