You are here

class ExtensionsDev in Site Audit 8.3

Provides the ExtensionsDev Check.

Plugin annotation


@SiteAuditCheck(
 id = "extensions_dev",
 name = @Translation("Development"),
 description = @Translation("Check for enabled development modules."),
 report = "extensions"
)

Hierarchy

Expanded class hierarchy of ExtensionsDev

File

src/Plugin/SiteAuditCheck/ExtensionsDev.php, line 17

Namespace

Drupal\site_audit\Plugin\SiteAuditCheck
View source
class ExtensionsDev extends SiteAuditCheckBase {

  /**
   * {@inheritdoc}.
   */
  public function getResultFail() {
  }

  /**
   * {@inheritdoc}.
   */
  public function getResultInfo() {
    return $this
      ->getResultWarn();
  }

  /**
   * {@inheritdoc}.
   */
  public function getResultPass() {
    return $this
      ->t('No enabled development extensions were detected; no action required.');
  }

  /**
   * {@inheritdoc}.
   */
  public function getResultWarn() {
    $ret_val = $this
      ->t('The following development modules(s) are currently enabled: @list', [
      '@list' => implode(', ', array_keys($this->registry->extensions_dev)),
    ]);
    $show_table = TRUE;
    if (site_audit_env_is_dev()) {
      $show_table = FALSE;
    }
    $table_rows = [];
    foreach ($this->registry->extensions_dev as $row) {
      $table_rows[] = $row;
    }
    $header = [
      $this
        ->t('Name'),
      $this
        ->t('Reason'),
    ];
    return [
      '#theme' => 'table',
      '#class' => 'table-condensed',
      '#header' => $header,
      '#rows' => $table_rows,
    ];
  }

  /**
   * {@inheritdoc}.
   */
  public function getAction() {
    if ($this
      ->getScore() == SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN) {
      $show_action = TRUE;
      if (site_audit_env_is_dev()) {
        $show_action = FALSE;
      }
      if ($show_action) {
        return $this
          ->t('Disable development modules for increased stability, security and performance in the Live (production) environment.');
      }
    }
  }

  /**
   * {@inheritdoc}.
   */
  public function calculateScore() {
    if (!isset($this->registry->extensions) || empty($this->registry->extensions)) {
      $this->registry->extensions = \Drupal::service('extension.list.module')
        ->getList();
      uasort($this->registry->extensions, 'system_sort_modules_by_info_name');
    }
    $this->registry->extensions_dev = [];
    $extension_info = $this->registry->extensions;

    // uasort($extension_info, '_drush_pm_sort_extensions');.
    $dev_extensions = $this
      ->getExtensions();
    foreach ($extension_info as $key => $extension) {
      $row = [];

      // Not in the list of known development modules.
      if (!array_key_exists($extension
        ->getName(), $dev_extensions)) {
        unset($extension_info[$key]);
        continue;
      }

      // Do not report modules that are dependencies of other modules, such
      // as field_ui in Drupal Commerce.
      if (isset($extension->required_by) && !empty($extension->required_by)) {
        unset($extension_info[$key]);
        continue;
      }

      // Name.
      $row[] = $extension
        ->getName();

      // Reason.
      $row[] = $dev_extensions[$extension
        ->getName()];
      $this->registry->extensions_dev[$extension
        ->getName()] = $row;
    }
    if (!empty($this->registry->extensions_dev)) {
      if (site_audit_env_is_dev()) {
        return SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO;
      }
      return SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN;
    }
    return SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS;
  }

  /**
   * Get a list of development extension names and reasons.
   *
   * @return array
   *   Keyed by module machine name, value is explanation.
   */
  public function getExtensions() {
    $developer_modules = [
      'ipsum' => $this
        ->t('Development utility to generate fake content.'),
      'testmodule' => $this
        ->t('Internal test module.'),
      // Examples module.
      'block_example' => $this
        ->t('Development examples.'),
      'cache_example' => $this
        ->t('Development examples.'),
      'config_entity_example' => $this
        ->t('Development examples.'),
      'content_entity_example' => $this
        ->t('Development examples.'),
      'dbtng_example' => $this
        ->t('Development examples.'),
      'email_example' => $this
        ->t('Development examples.'),
      'examples' => $this
        ->t('Development examples.'),
      'field_example' => $this
        ->t('Development examples.'),
      'field_permission_example' => $this
        ->t('Development examples.'),
      'file_example' => $this
        ->t('Development examples.'),
      'js_example' => $this
        ->t('Development examples.'),
      'node_type_example' => $this
        ->t('Development examples.'),
      'page_example' => $this
        ->t('Development examples.'),
      'phpunit_example' => $this
        ->t('Development examples.'),
      'simpletest_example' => $this
        ->t('Development examples.'),
      'tablesort_example' => $this
        ->t('Development examples.'),
      'tour_example' => $this
        ->t('Development examples.'),
    ];

    // From http://drupal.org/project/admin_menu admin_menu.inc in function
    // _admin_menu_developer_modules().
    $admin_menu_developer_modules = [
      'admin_devel' => $this
        ->t('Debugging utility; degrades performance.'),
      'cache_disable' => $this
        ->t('Development utility and performance drain; degrades performance.'),
      'coder' => $this
        ->t('Debugging utility; potential security risk and unnecessary performance hit.'),
      'content_copy' => $this
        ->t('Development utility; unnecessary overhead.'),
      'context_ui' => $this
        ->t('Development user interface; unnecessary overhead.'),
      'debug' => $this
        ->t('Debugging utility; potential security risk, unnecessary overhead.'),
      'delete_all' => $this
        ->t('Development utility; potentially dangerous.'),
      'demo' => $this
        ->t('Development utility for sandboxing.'),
      'devel' => $this
        ->t('Debugging utility; degrades performance and potential security risk.'),
      'devel_node_access' => $this
        ->t('Development utility; degrades performance and potential security risk.'),
      'devel_themer' => $this
        ->t('Development utility; degrades performance and potential security risk.'),
      'field_ui' => $this
        ->t('Development user interface; allows privileged users to change site structure which can lead to data inconsistencies. Best practice is to store Content Types in code and deploy changes instead of allowing editing in live environments.'),
      'fontyourface_ui' => $this
        ->t('Development user interface; unnecessary overhead.'),
      'form_controller' => $this
        ->t('Development utility; unnecessary overhead.'),
      'imagecache_ui' => $this
        ->t('Development user interface; unnecessary overhead.'),
      'journal' => $this
        ->t('Development utility; unnecessary overhead.'),
      'l10n_client' => $this
        ->t('Development utility; unnecessary overhead.'),
      'l10n_update' => $this
        ->t('Development utility; unnecessary overhead.'),
      'macro' => $this
        ->t('Development utility; unnecessary overhead.'),
      'rules_admin' => $this
        ->t('Development user interface; unnecessary overhead.'),
      'stringoverrides' => $this
        ->t('Development utility.'),
      'trace' => $this
        ->t('Debugging utility; degrades performance and potential security risk.'),
      'upgrade_status' => $this
        ->t('Development utility for performing a major Drupal core update; should removed after use.'),
      'user_display_ui' => $this
        ->t('Development user interface; unnecessary overhead.'),
      'util' => $this
        ->t('Development utility; unnecessary overhead, potential security risk.'),
      'views_ui' => $this
        ->t('Development UI; allows privileged users to change site structure which can lead to performance problems or inconsistent behavior. Best practice is to store Views in code and deploy changes instead of allowing editing in live environments.'),
      'views_theme_wizard' => $this
        ->t('Development utility; unnecessary overhead, potential security risk.'),
    ];
    return array_merge($admin_menu_developer_modules, $developer_modules);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ExtensionsDev::calculateScore public function . Overrides SiteAuditCheckBase::calculateScore
ExtensionsDev::getAction public function . Overrides SiteAuditCheckBase::getAction
ExtensionsDev::getExtensions public function Get a list of development extension names and reasons.
ExtensionsDev::getResultFail public function . Overrides SiteAuditCheckBase::getResultFail
ExtensionsDev::getResultInfo public function . Overrides SiteAuditCheckBase::getResultInfo
ExtensionsDev::getResultPass public function . Overrides SiteAuditCheckBase::getResultPass
ExtensionsDev::getResultWarn public function . Overrides SiteAuditCheckBase::getResultWarn
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
SiteAuditCheckBase::$abort protected property Names of checks that should not run as a result of this check.
SiteAuditCheckBase::$options protected property Options passed in for reports and checks.
SiteAuditCheckBase::$optOut protected property User has opted out of this check in configuration.
SiteAuditCheckBase::$percentOverride protected property If set, will override the Report's percentage.
SiteAuditCheckBase::$registry protected property Use for passing data between checks within a report.
SiteAuditCheckBase::$score protected property Quantifiable number associated with result on a scale of 0 to 2.
SiteAuditCheckBase::$static protected property Are we in a static context.
SiteAuditCheckBase::AUDIT_CHECK_SCORE_FAIL constant
SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO constant
SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS constant
SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN constant
SiteAuditCheckBase::checkInvokeCalculateScore protected function Invoke another check's calculateScore() method if it is needed.
SiteAuditCheckBase::getDescription public function Get a more verbose description of what is being checked.
SiteAuditCheckBase::getId public function Get the ID or machine name for the check.
SiteAuditCheckBase::getLabel public function Get the label for the check that describes, high level what is happening.
SiteAuditCheckBase::getPercentOverride public function Get the report percent override, if any.
SiteAuditCheckBase::getRegistry public function Get the check registry.
SiteAuditCheckBase::getResult public function Determine the result message based on the score.
SiteAuditCheckBase::getScore public function Get a quantifiable number representing a check result; lazy initialization.
SiteAuditCheckBase::getScoreLabel public function Get a human readable label for a score.
SiteAuditCheckBase::renderAction public function Display action items for a user to perform.
SiteAuditCheckBase::shouldAbort public function Determine whether the check failed so badly that the report must stop.
SiteAuditCheckBase::__construct public function Constructor. Overrides PluginBase::__construct
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.