groupmenu-8.x-1.0-beta2/src/Plugin/Group/Relation/GroupMenu.php
src/Plugin/Group/Relation/GroupMenu.php
<?php
namespace Drupal\groupmenu\Plugin\Group\Relation;
use Drupal\Core\Form\FormStateInterface;
use Drupal\group\Plugin\Group\Relation\GroupRelationBase;
/**
* Provides a relation enabler for menus.
*
* @GroupRelationType(
* id = "group_menu",
* label = @Translation("Group menu"),
* description = @Translation("Adds menus to groups both publicly and privately."),
* entity_type_id = "menu",
* entity_access = TRUE,
* reference_label = @Translation("Name"),
* reference_description = @Translation("The name of the menu to add to the group"),
* deriver = "Drupal\groupmenu\Plugin\Group\Relation\GroupMenuDeriver",
* )
*/
class GroupMenu extends GroupRelationBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
$config = parent::defaultConfiguration();
$config['entity_cardinality'] = 1;
$config['node_form_group_menu'] = 1;
$config['auto_create_group_menu'] = FALSE;
$config['auto_create_home_link'] = FALSE;
$config['auto_create_home_link_title'] = 'Home';
return $config;
}
/**
* {@inheritdoc}
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$configuration = $this->getConfiguration();
// Disable the entity cardinality field as the functionality of this module
// relies on a cardinality of 1. We don't just hide it, though, to keep a UI
// that's consistent with other content enabler plugins.
$info = $this->t("This field has been disabled by the plugin to guarantee the functionality that's expected of it.");
$form['entity_cardinality']['#disabled'] = TRUE;
$form['entity_cardinality']['#description'] .= '<br /><em>' . $info . '</em>';
$form['auto_create_group_menu'] = [
'#type' => 'checkbox',
'#title' => $this->t('Automatically create a menu when a group is created.'),
'#description' => $this->t('The menu will be added to the new group as a group menu. The menu will be deleted when group is deleted.'),
'#default_value' => $configuration['auto_create_group_menu'],
];
$form['auto_create_home_link'] = [
'#type' => 'checkbox',
'#title' => $this->t('Automatically create a "Home" link for the menu.'),
'#description' => $this->t('The "Home" link will link to the canonical URL of the group.'),
'#default_value' => $configuration['auto_create_home_link'],
'#states' => [
'visible' => [
':input[name="auto_create_group_menu"]' => ['checked' => TRUE],
],
],
];
$form['auto_create_home_link_title'] = [
'#type' => 'textfield',
'#title' => $this->t('Link title'),
'#default_value' => $configuration['auto_create_home_link_title'],
'#required' => TRUE,
'#states' => [
'visible' => [
':input[name="auto_create_home_link"]' => ['checked' => TRUE],
],
],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
// Only attach a menu config as a dependency if present.
$bundle = $this->getRelationType()->getEntityBundle();
if (isset($bundle) && strlen($bundle)) {
$dependencies['config'][] = 'system.menu.' . $bundle;
}
return $dependencies;
}
}
