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;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc