semantic_connector-8.x-1.1/src/Form/SemanticConnectorConfigForm.php

src/Form/SemanticConnectorConfigForm.php
<?php

namespace Drupal\semantic_connector\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Drupal\pp_graphsearch\Entity\PPGraphSearchConfig;
use Drupal\semantic_connector\SemanticConnector;
use Drupal\smart_glossary\Entity\SmartGlossaryConfig;

/**
 * Configure global settings of the Semantic Connector module..
 */
class SemanticConnectorConfigForm extends ConfigFormBase {
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'semantic_connector_config_form';
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'semantic_connector.settings',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {

    $config = $this->config('semantic_connector.settings');

    // Define the container for the vertical tabs.
    $form['settings'] = array(
      '#type' => 'vertical_tabs',
    );

    // Tab: Notifications.
    $form['notifications'] = array(
      '#type' => 'details',
      '#title' => t('Notifications'),
      '#group' => 'settings',
    );

    $form['notifications']['semantic_connector_version_checking'] = array(
      '#type' => 'checkbox',
      '#title' => $this->t('Service version checking'),
      '#default_value' => $config->get('version_checking'),
      '#description' => $this->t("Check for newer versions of PoolParty servers and GraphSearch servers"),
    );

    // Automatic checks.
    $notifications = SemanticConnector::getGlobalNotificationConfig();
    $form['notifications']['semantic_connector_notifications'] = array(
      '#type' => 'fieldset',
      '#title' => t('Global notifications'),
      '#tree' => TRUE,
    );

    $form['notifications']['semantic_connector_notifications']['enabled'] = array(
      '#type' => 'checkbox',
      '#title' => t('Enable global notifications'),
      '#default_value' => $notifications['enabled'],
      '#description' => t("If global notifications are enabled, selected checks will be done in a set interval, informing selected users in case any action has to be performed.") . '<br />' . t("This information is either provided by adding Drupal warning messages appearing on every Drupal page or by sending mails to the users."),
    );

    $form['notifications']['semantic_connector_notifications']['interval'] = array(
      '#type' => 'radios',
      '#title' => t('Notification interval'),
      '#options' => array(
        '86400' => t('daily'),
        '604800' => t('every 7 days'),
        '2592000' => t('every 30 days'),
      ),
      '#default_value' => $notifications['interval'],
      '#states' => array(
        'visible' => array(
          ':input[name="semantic_connector_notifications[enabled]"]' => array('checked' => TRUE),
        ),
      ),
    );

    $user_roles = user_roles();
    $role_options = array();
    foreach ($user_roles as $user_role) {
      $role_options[$user_role->id()] = $user_role->label();
    }
    $form['notifications']['semantic_connector_notifications']['roles'] = array(
      '#type' => 'checkboxes',
      '#title' => t('Roles that will receive Drupal warning messages'),
      '#options' => $role_options,
      '#default_value' => $notifications['roles'],
      '#states' => array(
        'visible' => array(
          ':input[name="semantic_connector_notifications[enabled]"]' => array('checked' => TRUE),
        ),
      ),
    );

    $form['notifications']['semantic_connector_notifications']['mail_to'] = array(
      '#type' => 'textfield',
      '#title' => t('Mail addresses to notify via mail'),
      '#description' => t('A comma seperated list of mail addresses to send notification mails to.'),
      '#default_value' => $notifications['mail_to'],
      '#size' => 100,
      '#states' => array(
        'visible' => array(
          ':input[name="semantic_connector_notifications[enabled]"]' => array('checked' => TRUE),
        ),
      ),
    );

    $notification_actions = SemanticConnector::getGlobalNotificationActions();
    $form['notifications']['semantic_connector_notifications']['actions'] = array(
      '#type' => 'fieldset',
      '#title' => t('Notify about following required actions:'),
      '#tree' => TRUE,
      '#states' => array(
        'visible' => array(
          ':input[name="semantic_connector_notifications[enabled]"]' => array('checked' => TRUE),
        ),
      ),
    );

    if (empty($notification_actions)) {
      $form['notifications']['semantic_connector_notifications']['actions']['info'] = array(
        '#type' => 'markup',
        '#markup' => '<div class="messages warning">' . t('There are currently no checks for global notifications available.') . '</div>',
      );
    }
    else {
      foreach ($notification_actions as $notification_action) {
        $form['notifications']['semantic_connector_notifications']['actions'][$notification_action['id']] = array(
          '#type' => 'checkbox',
          '#title' => $notification_action['title'],
          '#default_value' => isset($notifications['actions'][$notification_action['id']]) ? $notifications['actions'][$notification_action['id']] : $notification_action['default_value'],
          '#description' => $notification_action['description'],
        );
      }
    }

    $form['notifications']['semantic_connector_notifications']['refresh_notifications'] = array(
      '#type' => 'link',
      '#title' => t('Refresh the global notifications now'),
      '#url' => Url::fromRoute('semantic_connector.refresh_notifications'),
      '#attributes' => array(
        'class' => array('button'),
      ),
      '#options' => array(
        'query' => array(
          'destination' => \Drupal::service('path.current')->getPath(),
        ),
      ),
    );

    // Tab: Module interconnection.
    $form['interconnection'] = array(
      '#type' => 'details',
      '#title' => t('Module interconnection'),
      '#group' => 'settings',
    );

    $form['interconnection']['semantic_connector_term_click_destinations'] = array(
      '#type' => 'table',
      '#prefix' => '<label>' . t('Term Click Destinations') . '</label>',
      '#suffix' => '<div class="description">' . t('Select which items should be displayed when clicking on a term.') . '<br />' . t('A whole destination type can be hidden by deselecting the "Show"-checkbox above, single destinations can be hidden inside their module\'s configuration page.') . '</div>',
      '#header' => array(t('Destination name'), t('Show'), t('List title'), t('Weight')),
      '#empty' => t('There are no term click destinations available yet.'),
      '#tabledrag' => array(
        array(
          'action' => 'order',
          'relationship' => 'sibling',
          'group' => 'term-click-destinations-order-weight',
        ),
      ),
      '#tree' => TRUE,
    );

    $destinations = SemanticConnector::getDestinations();
    foreach ($destinations as $destination_id => $destination) {
      // TableDrag: Mark the table row as draggable.
      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['#attributes']['class'][] = 'draggable';

      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['label'] = array(
        '#markup' => $destination['label'],
      );

      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['#weight'] = $destination['weight'];

      // Add a list of sub-destinations if required.
      $connection_list_items = '';
      if ($destination_id == 'smart_glossary_detail_page') {
        $configs = SmartGlossaryConfig::loadMultiple();
        /** @var SmartGlossaryConfig $config */
        foreach ($configs as $config) {
          $advanced_settings = $config->getAdvancedSettings();
          $connection_list_items .= '<li>' . Link::fromTextAndUrl($config->getTitle(), Url::fromRoute('entity.smart_glossary.edit_form', array('smart_glossary' => $config->id()), array('query' => array('destination' => 'admin/config/semantic-drupal/semantic-connector/config'))))
              ->toString() . ' <b>' . ((isset($advanced_settings['semantic_connection']) && isset($advanced_settings['semantic_connection']['show_in_destinations']) && !$advanced_settings['semantic_connection']['show_in_destinations']) ? 'deactivated' : 'activated') . '</b></li>';
        }
      }
      elseif ($destination_id == 'pp_graphsearch') {
        $config_sets = PPGraphSearchConfig::loadMultiple();
        /** @var PPGraphSearchConfig $config */
        foreach ($config_sets as $config) {
          $advanced_config = $config->getConfig();
          $connection_list_items .= '<li>' . Link::fromTextAndUrl($config->getTitle(), Url::fromRoute('entity.pp_graphsearch.edit_config_form', array('pp_graphsearch' => $config->id()), array('query' => array('destination' => 'admin/config/semantic-drupal/semantic-connector/config'))))
              ->toString() . ' <b>' . ((isset($advanced_config['semantic_connection']) && isset($advanced_config['semantic_connection']['show_in_destinations']) && !$advanced_config['semantic_connection']['show_in_destinations']) ? 'deactivated' : 'activated') . '</b></li>';
        }
      }
      if (!empty($connection_list_items)) {
        $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['label']['#markup'] .= '<ul>' . $connection_list_items . '</ul>';
      }

      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['use'] = array(
        '#type' => 'checkbox',
        '#default_value' => $destination['use'],
      );

      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['list_title'] = array(
        '#type' => 'textfield',
        '#size' => 15,
        '#maxlength' => 255,
        '#default_value' => $destination['list_title'],
      );

      // This field is invisible, but contains sort info (weights).
      $form['interconnection']['semantic_connector_term_click_destinations'][$destination_id]['weight'] = array(
        '#type' => 'weight',
        // Weights from -255 to +255 are supported because of this delta.
        '#delta' => 255,
        '#title_display' => 'invisible',
        '#default_value' => $destination['weight'],
        '#attributes' => array('class' => array('term-click-destinations-order-weight')),
      );
    }

    return parent::buildForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $notifications = $form_state->getValue('semantic_connector_notifications');
    $notifications['roles'] = array_values(array_filter($notifications['roles']));

    // Update the configuration
    $this->config('semantic_connector.settings')
      ->set('version_checking', $form_state->getValue('semantic_connector_version_checking'))
      ->set('term_click_destinations', $form_state->getValue('semantic_connector_term_click_destinations'))
      ->set('notifications', $notifications)
      ->save();

    parent::submitForm($form, $form_state);
  }
}

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

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