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'),
];
$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' => '
',
'#suffix' => '
',
];
}
$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'])
->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_set_message(new TranslatableMarkup('Finished importing fonts.'));
}
}