You are here

public function FontSettingsForm::buildForm in @font-your-face 8.3

Defines the settings form for Font entities.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array Form definition array.

Overrides ConfigFormBase::buildForm

File

src/Form/FontSettingsForm.php, line 47

Class

FontSettingsForm
Form to define the fonts.

Namespace

Drupal\fontyourface\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('fontyourface.settings');
  $form['Font_settings']['#markup'] = 'Settings form for @font-your-face. Support modules can use this form for settings or to import fonts.';
  $form['load_all_enabled_fonts'] = [
    '#type' => 'checkbox',
    '#title' => $this
      ->t('Load all enabled fonts'),
    '#default_value' => (int) $config
      ->get('load_all_enabled_fonts'),
    '#description' => $this
      ->t('This will load all fonts that have been enabled regardless of theme. Warning: this may add considerable download weight to your pages depending on the number of enabled fonts'),
  ];
  $themes = [];
  foreach (\Drupal::service('theme_handler')
    ->listInfo() as $name => $theme) {
    if ($theme->status === 1) {
      $themes[$name] = $theme->info['name'];
    }
  }
  $form['load_on_themes'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Load fonts only on selected themes'),
    '#options' => $themes,
    '#default_value' => $config
      ->get('load_on_themes'),
    '#description' => $this
      ->t('Select only the themes on which you need to enable all fonts. Leave blank to load it on all themes.'),
    '#states' => [
      'visible' => [
        ':input[name="load_all_enabled_fonts"]' => [
          'checked' => TRUE,
        ],
      ],
    ],
    '#multiple' => TRUE,
  ];
  $form['imports'] = [
    '#type' => 'fieldset',
    '#title' => 'Import',
    '#collapsible' => FALSE,
  ];

  // Set the module weight. There is some general Drupal funk around module
  // weights.
  module_set_weight('fontyourface', 1);
  foreach (\Drupal::moduleHandler()
    ->getImplementations('fontyourface_api') as $module_name) {
    module_set_weight($module_name, 10);
  }
  foreach (\Drupal::moduleHandler()
    ->getImplementations('fontyourface_import') as $module_name) {
    $form['imports']['import_' . $module_name] = [
      '#type' => 'submit',
      '#value' => $this
        ->t('Import from @module', [
        '@module' => $module_name,
      ]),
      '#attributes' => [
        'style' => 'margin: 10px;',
      ],
      '#prefix' => '<div>',
      '#suffix' => '</div>',
    ];
  }
  $form['imports']['import'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Import all fonts'),
    '#weight' => 10,
  ];
  return parent::buildForm($form, $form_state);
}