' . t('About') . ''; $output .= '

' . t('The Features module provides a user interface for exporting bundles of configuration into modules. For more information, see the online documentation for Features module', array( ':url' => 'http://drupal.org/node/2404427', )) . '

'; return $output; } } /** * Implements hook_file_download(). */ function features_file_download($uri) { $scheme = file_uri_scheme($uri); $target = file_uri_target($uri); if ($scheme == 'temporary' && $target) { $request = \Drupal::request(); $route = $request->attributes->get('_route'); // Check if we were called by Features download route. // No additional access checking needed here: route requires // "export configuration" permission, token is validated by the controller. // @see \Drupal\features\Controller\FeaturesController::downloadExport() if ($route == 'features.export_download') { return array( 'Content-disposition' => 'attachment; filename="' . $target . '"', ); } } } /** * Implements hook_modules_installed(). */ function features_modules_installed($modules) { if (!in_array('features', $modules)) { /** @var \Drupal\features\FeaturesAssignerInterface $assigner */ $assigner = \Drupal::service('features_assigner'); $assigner->purgeConfiguration(); } }