SettingsForm.php 3.76 KB
<?php

/**
 * @file
 * Contains \Drupal\csna\Form\SettingsForm.
 */

namespace Drupal\csna\Form;

use Drupal\Core\Form\ConfigFormBase;
use Symfony\Component\HttpFoundation\Request;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;

/**
 * Defines a form that configures csna settings.
 */
class SettingsForm extends ConfigFormBase {
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'csna_admin_settings_form';
  }

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

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state, Request $request = NULL) {
    $providers = csna_providers();
    foreach ($providers as $provider_id => $provider) {
      $config = \Drupal::config('csna.' . $provider);
      $form[$provider_id] = array(
          '#type' => 'fieldset',
          '#title' => $provider['title'],
          '#description' => $provider['description'],
      );
      $form[$provider_id]['csna_' . $provider_id . '_key'] = array(
          '#type' => 'textfield',
          '#title' => t('Key'),
          '#size' => 40,
          '#maxlength' => 255,
          '#default_value' => $config->get('csna_' . $provider_id . '_key'),
      );
      $form[$provider_id]['csna_' . $provider_id . '_secret'] = array(
          '#type' => 'textfield',
          '#title' => t('Secret'),
          '#size' => 40,
          '#maxlength' => 255,
          '#default_value' => $config->get('csna_' . $provider_id . '_secret'),
      );
    }

    // If no provider/sub-module was found, provide a default help text.
    if (!isset($form)) {
      $form['default_message'] = array(
          '#markup' => t('<strong>No CSNA third party API provider module has been enabled yet</strong>.<br/>Please enable <strong>at least a CSNA sub-module</strong> or any other <strong>CSNA API provider</strong> from the !modadminlink then feel free to browse this page again.<br/>See more information on !projectlink about <strong>supported providers</strong> and <strong>installation instructions</strong>.', array(
              '!modadminlink' => \Drupal::l(t('module administration page'), Url::fromRoute('system.modules_list')),
              '!projectlink' => \Drupal::l(t("module project's page"), Url::fromUri('http://drupal.org/project/csna', array('attributes' => array('target' => '_blank')))),
          )),
      );
      return parent::buildForm($form, $form_state);
    }
    else {
      $config = \Drupal::config('csna.settings');
      $form['csna_require_email'] = array(
          '#type' => 'checkbox',
          '#title' => t('Require email'),
          '#description' => t('Require user entering email after successful user login if email hasn\'t been set yet.'),
          '#default_value' => $config->get('csna_require_email'),
      );

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


  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    parent::submitForm($form, $form_state);
    $providers = csna_providers();
    foreach ($providers as $provider_id => $provider) {
      $config_providers = \Drupal::service('config.factory')->getEditable('csna.' . $provider);
      // Let active plugins save their settings.
      $config_providers->set('csna_' . $provider_id . '_key', $form_state->getValue('csna_' . $provider_id . '_key'));
      $config_providers->set('csna_' . $provider_id . '_secret', $form_state->getValue('csna_' . $provider_id . '_secret'));
      $config_providers->save();
    }
    $config_settings = \Drupal::service('config.factory')->getEditable('csna.settings');
    $config_settings->set('csna_require_email', $form_state->getValue('csna_require_email'));
    $config_settings->save();
  }
}