Skip to content
Snippets Groups Projects
ModuleConfigurationForm.php 8.09 KiB
<?php

namespace Drupal\wcm8_siteinfo\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Defines a form that configures module settings.
 */
class ModuleConfigurationForm extends ConfigFormBase {

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'wcm8_siteinfo_admin_settings';
  }

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

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('wcm8_siteinfo.settings');
    $site_config = $this->config('system.site');
    $site_name = $site_config->get('name');
    
    $form['siteinfo'] = array(
      '#type' => 'vertical_tabs',
      '#default_tab' => 'edit-basic',
    );
    
    // Basic Information tab
    $form['basic'] = array(
      '#type' => 'details',
      '#title' => $this->t('Basic Information'),
      '#group' => 'siteinfo',
    );
    
    $form['basic']['prefix'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Site Name Prefix'),
      '#description' => $this->t('The prefix for your site name - for example, <i>Department of</i> ... '),
      '#size' => '60',
      '#maxlength' => '60',
      '#default_value' => $config->get('prefix'),
    );
    
    $form['basic']['site_name'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Site Name'),
      '#description' => $this->t('READ ONLY for now until this app is done. Main name for the site - it should be your college, department or organization name.'),
      '#size' => '60',
      '#maxlength' => '75',
      '#default_value' => $site_name,
      '#attributes' => array('readonly' => 'readonly'),
    );
    
    $form['basic']['admin_link'] = array(
      '#type' => 'checkbox',
      '#title' => $this->t('Admin Link'),
      '#description' => $this->t('Check this box if you would like to display an admin login link in your site footer. It will be displayed discretely below the Footer Block.'),
      '#default_value' => $config->get('admin_link'),
    );
    
    $form['basic']['footer_block'] = array(
      '#type' => 'text_format',
      '#title' => $this->t('Footer Block'),
      '#description' => $this->t('This content will be displayed in the footer below the contact info. It can contain links or other pertinent information. This is a good place for your ADA statement.'),
      '#format' => 'basic_html',
      '#default_value' => $config->get('footer_block.value'),
    );

    // Contact Information tab
    $form['contact'] = array(
      '#type' => 'details',
      '#title' => $this->t('Contact Information'),
      '#description' => $this->t('Contact information will be displayed below the Ohio State wordmark in the site footer. Leave blank any fields that you do not want to be displayed.'),
      '#group' => 'siteinfo',
    );

    $form['contact']['address_1'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Address Line 1'),
      '#description' => $this->t('First line of address. Room number and building if on campus.'),
      '#default_value' => $config->get('address_1'),
    );
    
    $form['contact']['address_2'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Address Line 2'),
      '#description' => $this->t('Second line of address. Street address if on campus.'),
      '#default_value' => $config->get('address_2'),
    );
    
    $form['contact']['city'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('City'),
      '#default_value' => $config->get('city'),
    );
    
    $form['contact']['state'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('State'),
      '#default_value' => $config->get('state'),
    );
    
    $form['contact']['zip'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Zip Code'),
      '#default_value' => $config->get('zip'),
    );
    
    $form['contact']['phone'] = array(
      '#type' => 'tel',
      '#title' => $this->t('Phone'),
      '#description' => $this->t('Main contact phone number for your site.'),
      '#default_value' => $config->get('phone'),
    );
    
    $form['contact']['fax'] = array(
      '#type' => 'tel',
      '#title' => $this->t('Fax'),
      '#description' => $this->t('Fax number, if applicable.'),
      '#default_value' => $config->get('fax'),
    );
    
    $form['contact']['contact_email'] = array(
      '#type' => 'email',
      '#title' => $this->t('Email'),
      '#description' => $this->t('Main contact email for your site.'),
      '#default_value' => $config->get('contact_email'),
    );
    
    // Social Networking tab
    $form['social'] = array(
      '#type' => 'details',
      '#title' => $this->t('Social Networking'),
      '#description' => $this->t('Linked icons will be displayed in the site footer for each account url that you provide. Leave blank any fields that you do not want to be displayed.'),
      '#group' => 'siteinfo',
    );
    
    $form['social']['twitter'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Twitter'),
      '#description' => t('Enter the URL to your Twitter account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('twitter'),
    );
    
    $form['social']['facebook'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Facebook'),
      '#description' => t('Enter the URL to your Facebook account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('facebook'),
    );
    
    $form['social']['linkedin'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('LinkedIn'),
      '#description' => t('Enter the URL to your LinkedIn account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('linkedin'),
    );
    
    $form['social']['googleplus'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Google+'),
      '#description' => t('Enter the URL to your Google+ account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('googleplus'),
    );
    
    $form['social']['youtube'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('YouTube'),
      '#description' => t('Enter the URL to your YouTube account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('youtube'),
    );
    
    $form['social']['instagram'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Instagram'),
      '#description' => t('Enter the URL to your Instagram account.'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('instagram'),
    );
    
    $form['social']['photos'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('Photos'),
      '#description' => t('Enter the URL to your photo sharing account (ex. Flickr, SmugMug, Picasa, etc...).'),
      '#size' => '70',
      '#maxlength' => '150',
      '#default_value' => $config->get('photos'),
    );

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

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    $this->config('wcm8_siteinfo.settings')
      ->set('prefix', $values['prefix'])
      ->set('admin_link', $values['admin_link'])
      ->set('footer_block', $values['footer_block'])
      ->set('address_1', $values['address_1'])
      ->set('address_2', $values['address_2'])
      ->set('city', $values['city'])
      ->set('state', $values['state'])
      ->set('zip', $values['zip'])
      ->set('phone', $values['phone'])
      ->set('fax', $values['fax'])
      ->set('email', $values['contact_email'])
      ->set('twitter', $values['twitter'])
      ->set('facebook', $values['facebook'])
      ->set('linkedin', $values['linkedin'])
      ->set('googleplus', $values['googleplus'])
      ->set('youtube', $values['youtube'])
      ->set('instagram', $values['instagram'])
      ->set('photos', $values['photos'])
      ->save();

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

}