View source
<?php
namespace Drupal\group_content_menu\Plugin\GroupContentEnabler;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\group\Entity\GroupInterface;
use Drupal\group\Plugin\GroupContentEnablerBase;
use Drupal\group_content_menu\Entity\GroupContentMenuType;
class GroupContentMenu extends GroupContentEnablerBase {
protected function getMenuType() {
return GroupContentMenuType::load($this
->getEntityBundle());
}
public function getGroupOperations(GroupInterface $group) {
$account = \Drupal::currentUser();
$operations = [];
$url = Url::fromRoute('entity.group_content_menu.collection', [
'group' => $group
->id(),
]);
if ($url
->access($account)) {
$operations['group-content-menu-collection'] = [
'title' => $this
->t('Edit group menus'),
'url' => $url,
'weight' => 100,
];
}
return $operations;
}
public function defaultConfiguration() {
$config = parent::defaultConfiguration();
$config['group_cardinality'] = 1;
$config['entity_cardinality'] = 1;
$config['auto_create_group_menu'] = FALSE;
$config['auto_create_home_link'] = FALSE;
$config['auto_create_home_link_title'] = 'Home';
return $config;
}
public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
$form = parent::buildConfigurationForm($form, $form_state);
$configuration = $this
->getConfiguration();
$info = $this
->t("This field has been disabled by the plugin to guarantee the functionality that's expected of it.");
$form['group_cardinality']['#disabled'] = TRUE;
$form['group_cardinality']['#description'] .= '<br /><em>' . $info . '</em>';
$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;
}
protected function getGroupContentPermissions() {
$plugin_id = $this
->getPluginId();
$permissions["create {$plugin_id} content"] = [
'title' => 'Relate menu',
'description' => 'Allows you to relate a menu to the group.',
];
return $permissions;
}
protected function getTargetEntityPermissions() {
return [];
}
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
$dependencies['config'][] = 'group_content_menu.group_content_menu_type.' . $this
->getEntityBundle();
return $dependencies;
}
public function postInstall() {
parent::postInstall();
\Drupal::service("router.builder")
->rebuild();
}
}