/** * Imports data for a provider that was manually uploaded in theme settings. * * @param \Drupal\Core\Form\FormStateInterface $form_state * The current state of the form. */ private function importProviderData(FormStateInterface $form_state) { if ($form_state->getValue('clicked_button') === t('Save provider data')->render()) { $provider_path = ProviderManager::FILE_PATH; file_prepare_directory($provider_path, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS); $provider = $form_state->getValue('cdn_provider', $this->theme->getSetting('cdn_provider')); $file = "{$provider_path}/{$provider}.json"; if ($import_data = $form_state->getValue('cdn_provider_import_data', FALSE)) { file_unmanaged_save_data($import_data, $file, FILE_EXISTS_REPLACE); } elseif ($file && file_exists($file)) { file_unmanaged_delete($file); } // Clear the cached definitions so they can get rebuilt. $this->providerManager->clearCachedDefinitions(); } }
/** * Retrieves a list of available CDN providers for the Bootstrap framework. * * @param string $provider * A specific provider data to return. * @param bool $reset * Toggle determining whether or not to reset the database cache. * * @return array|FALSE * An associative array of CDN providers, keyed by their machine name if * $provider is not set. If $provider is set and exists, it's individual * data array will be returned. If $provider is set and the data does not * exist then FALSE will be returned. * * @deprecated Will be removed in a future release. * * @code * // Before. * $providers = bootstrap_cdn_provider(); * $jsdelivr = bootstrap_cdn_provider('jsdelivr'); * * // After. * use Drupal\bootstrap\Bootstrap; * use Drupal\bootstrap\Plugin\ProviderManager; * * $theme = Bootstrap::getTheme(); * * // Get provider definitions, the "equivalent" for bootstrap_cdn_provider(). * $provider_manager = new ProviderManager($theme); * $providers = $provider_manager->getDefinitions(); * $jsdelivr = $provider_manager->getDefinition('jsdelivr'); * * // You should, however, use the the fully initialized classes made * // available through a theme instance. * $providers = $theme->getProviders(); * $jsdelivr = $theme->getProvider('jsdelivr'); * @endcode * * @see \Drupal\bootstrap\Plugin\ProviderManager * @see \Drupal\bootstrap\Theme::getProviders() * @see \Drupal\bootstrap\Theme::getProvider() */ function bootstrap_cdn_provider($provider = NULL, $reset = FALSE) { Bootstrap::deprecated(); $provider_manager = new ProviderManager(Bootstrap::getTheme()); if ($reset) { $provider_manager->clearCachedDefinitions(); } if (isset($provider)) { if ($provider_manager->hasDefinition($provider)) { return $provider_manager->getDefinition($provider); } return FALSE; } return $provider_manager->getDefinitions(); }
/** * Retrieves all CDN providers. * * @return \Drupal\bootstrap\Plugin\Provider\ProviderInterface[] * All provider instances. */ public function getProviders() { $providers = []; $provider_manager = new ProviderManager($this); foreach (array_keys($provider_manager->getDefinitions()) as $provider) { if ($provider === 'none') { continue; } $providers[$provider] = $provider_manager->createInstance($provider, ['theme' => $this]); } return $providers; }