You are here

class FontSettingsForm in @font-your-face 8.3

Form to define the fonts.

@package Drupal\fontyourface\Form

Hierarchy

Expanded class hierarchy of FontSettingsForm

1 string reference to 'FontSettingsForm'
fontyourface.routing.yml in ./fontyourface.routing.yml
fontyourface.routing.yml

File

src/Form/FontSettingsForm.php, line 17

Namespace

Drupal\fontyourface\Form
View source
class FontSettingsForm extends ConfigFormBase {

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

  /**
   * Returns a unique string identifying the form.
   *
   * @return string
   *   The unique string identifying the form.
   */
  public function getFormId() {
    return 'Font_settings';
  }

  /**
   * Defines the settings form for Font entities.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   *
   * @return array
   *   Form definition array.
   */
  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);
  }

  /**
   * Form submission handler.
   *
   * @param array $form
   *   An associative array containing the structure of the form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $values = $form_state
      ->getValues();
    $op = (string) $values['op'];
    $batch = [
      'title' => $this
        ->t('Importing...'),
      'operations' => [],
      'finished' => '\\Drupal\\fontyourface\\Form\\FontSettingsForm::importFinished',
    ];
    foreach (\Drupal::moduleHandler()
      ->getImplementations('fontyourface_import') as $module_name) {
      if ($op == $this
        ->t('Import all fonts') || $op == $this
        ->t('Import from @module', [
        '@module' => $module_name,
      ])) {
        $batch['operations'][] = [
          '\\Drupal\\fontyourface\\Form\\FontSettingsForm::importFromProvider',
          [
            $module_name,
          ],
        ];
      }
    }
    if (!empty($batch['operations'])) {
      batch_set($batch);
    }
    if ($op == $this
      ->t('Save configuration')) {
      $config = $this
        ->config('fontyourface.settings')
        ->set('load_all_enabled_fonts', $values['load_all_enabled_fonts'])
        ->set('load_on_themes', $values['load_on_themes'])
        ->save();
      parent::submitForm($form, $form_state);
    }

    // Resave enabled fonts.
    $fonts = Font::loadActivatedFonts();
    foreach ($fonts as $font) {
      $font
        ->activate();
    }
  }

  /**
   * Imports fonts from provider. Batch operation handler.
   *
   * @param string $module
   *   Module name that is providing fonts.
   * @param array $context
   *   Context batch array.
   */
  public static function importFromProvider($module, array &$context) {
    $context['message'] = new TranslatableMarkup('Importing from @module', [
      '@module' => $module,
    ]);
    $module_handler = \Drupal::moduleHandler();
    $new_context = $module_handler
      ->invoke($module, 'fontyourface_import', [
      $context,
    ]);
    if (!empty($new_context)) {
      $context = $new_context;
    }
  }

  /**
   * Imports fonts from provider. Batch completion handler.
   *
   * @param bool $success
   *   Boolean if operations were successful.
   * @param array $results
   *   Results of batch operations.
   * @param array $operations
   *   List of batch operations run.
   */
  public static function importFinished($success, array $results, array $operations) {
    \Drupal::messenger()
      ->addMessage(new TranslatableMarkup('Finished importing fonts.'));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ConfigFormBase::create public static function Instantiates a new instance of this class. Overrides FormBase::create 13
ConfigFormBase::__construct public function Constructs a \Drupal\system\ConfigFormBase object. 11
ConfigFormBaseTrait::config protected function Retrieves a configuration object.
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FontSettingsForm::buildForm public function Defines the settings form for Font entities. Overrides ConfigFormBase::buildForm
FontSettingsForm::getEditableConfigNames protected function Gets the configuration names that will be editable. Overrides ConfigFormBaseTrait::getEditableConfigNames
FontSettingsForm::getFormId public function Returns a unique string identifying the form. Overrides FormInterface::getFormId
FontSettingsForm::importFinished public static function Imports fonts from provider. Batch completion handler.
FontSettingsForm::importFromProvider public static function Imports fonts from provider. Batch operation handler.
FontSettingsForm::submitForm public function Form submission handler. Overrides ConfigFormBase::submitForm
FormBase::$configFactory protected property The config factory. 1
FormBase::$requestStack protected property The request stack. 1
FormBase::$routeMatch protected property The route match.
FormBase::configFactory protected function Gets the config factory for this form. 1
FormBase::container private function Returns the service container.
FormBase::currentUser protected function Gets the current user.
FormBase::getRequest protected function Gets the request object.
FormBase::getRouteMatch protected function Gets the route match.
FormBase::logger protected function Gets the logger for a specific channel.
FormBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
FormBase::resetConfigFactory public function Resets the configuration factory.
FormBase::setConfigFactory public function Sets the config factory for this form.
FormBase::setRequestStack public function Sets the request stack object to use.
FormBase::validateForm public function Form validation handler. Overrides FormInterface::validateForm 62
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.