You are here

class SiteAuditCheckExtensionsDev in Site Audit 8.2

Same name and namespace in other branches
  1. 7 Check/Extensions/Dev.php \SiteAuditCheckExtensionsDev

Class SiteAuditCheckExtensionsDev.

Hierarchy

Expanded class hierarchy of SiteAuditCheckExtensionsDev

File

Check/Extensions/Dev.php, line 10
Contains \SiteAudit\Check\Extensions\Dev.

View source
class SiteAuditCheckExtensionsDev extends SiteAuditCheckAbstract {

  /**
   * Implements \SiteAudit\Check\Abstract\getLabel().
   */
  public function getLabel() {
    return dt('Development');
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getDescription().
   */
  public function getDescription() {
    return dt('Check for enabled development modules.');
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getResultFail().
   */
  public function getResultFail() {
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getResultInfo().
   */
  public function getResultInfo() {
    return $this
      ->getResultWarn();
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getResultPass().
   */
  public function getResultPass() {
    return dt('No enabled development extensions were detected; no action required.');
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getResultWarn().
   */
  public function getResultWarn() {
    $ret_val = dt('The following development modules(s) are currently enabled: @list', array(
      '@list' => implode(', ', array_keys($this->registry['extensions_dev'])),
    ));
    $show_table = TRUE;
    if (site_audit_env_is_dev()) {
      $show_table = FALSE;
    }
    if (drush_get_option('detail')) {
      if (drush_get_option('html')) {
        if ($show_table) {
          $ret_val .= '<br/>';
          $ret_val .= '<table class="table table-condensed">';
          $ret_val .= '<thead><tr><th>' . dt('Name') . '</th><th>' . dt('Reason') . '</th></thead>';
          $ret_val .= '<tbody>';
          foreach ($this->registry['extensions_dev'] as $row) {
            $ret_val .= '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
          }
          $ret_val .= '</tbody>';
          $ret_val .= '</table>';
        }
      }
      elseif ($show_table) {
        foreach ($this->registry['extensions_dev'] as $row) {
          $ret_val .= PHP_EOL;
          if (!drush_get_option('json')) {
            $ret_val .= str_repeat(' ', 6);
          }
          $ret_val .= '- ' . $row[0] . ': ' . $row[1];
        }
      }
    }
    return $ret_val;
  }

  /**
   * Implements \SiteAudit\Check\Abstract\getAction().
   */
  public function getAction() {
    if ($this
      ->getScore() == SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_WARN) {
      $show_action = TRUE;
      if (site_audit_env_is_dev()) {
        $show_action = FALSE;
      }
      if ($show_action) {
        return dt('Disable development modules for increased stability, security and performance in the Live (production) environment.');
      }
    }
  }

  /**
   * Implements \SiteAudit\Check\Abstract\calculateScore().
   */
  public function calculateScore() {
    $this->registry['extensions_dev'] = array();
    $extension_info = $this->registry['extensions'];
    uasort($extension_info, '_drush_pm_sort_extensions');
    $dev_extensions = $this
      ->getExtensions();
    foreach ($extension_info as $key => $extension) {
      $row = array();
      $status = drush_get_extension_status($extension);

      // Only enabled extensions.
      if (!in_array($status, array(
        'enabled',
      ))) {
        unset($extension_info[$key]);
        continue;
      }

      // 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->label;

      // 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 SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
      }
      return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_WARN;
    }
    return SiteAuditCheckAbstract::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 = array(
      'ipsum' => dt('Development utility to generate fake content.'),
      'testmodule' => dt('Internal test module.'),
      // Examples module.
      'block_example' => dt('Development examples.'),
      'cache_example' => dt('Development examples.'),
      'config_entity_example' => dt('Development examples.'),
      'content_entity_example' => dt('Development examples.'),
      'dbtng_example' => dt('Development examples.'),
      'email_example' => dt('Development examples.'),
      'examples' => dt('Development examples.'),
      'field_example' => dt('Development examples.'),
      'field_permission_example' => dt('Development examples.'),
      'file_example' => dt('Development examples.'),
      'js_example' => dt('Development examples.'),
      'node_type_example' => dt('Development examples.'),
      'page_example' => dt('Development examples.'),
      'phpunit_example' => dt('Development examples.'),
      'simpletest_example' => dt('Development examples.'),
      'tablesort_example' => dt('Development examples.'),
      'tour_example' => dt('Development examples.'),
    );

    // From http://drupal.org/project/admin_menu admin_menu.inc in function
    // _admin_menu_developer_modules().
    $admin_menu_developer_modules = array(
      'admin_devel' => dt('Debugging utility; degrades performance.'),
      'cache_disable' => dt('Development utility and performance drain; degrades performance.'),
      'coder' => dt('Debugging utility; potential security risk and unnecessary performance hit.'),
      'content_copy' => dt('Development utility; unnecessary overhead.'),
      'context_ui' => dt('Development user interface; unnecessary overhead.'),
      'debug' => dt('Debugging utility; potential security risk, unnecessary overhead.'),
      'delete_all' => dt('Development utility; potentially dangerous.'),
      'demo' => dt('Development utility for sandboxing.'),
      'devel' => dt('Debugging utility; degrades performance and potential security risk.'),
      'devel_node_access' => dt('Development utility; degrades performance and potential security risk.'),
      'devel_themer' => dt('Development utility; degrades performance and potential security risk.'),
      'field_ui' => dt('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' => dt('Development user interface; unnecessary overhead.'),
      'form_controller' => dt('Development utility; unnecessary overhead.'),
      'imagecache_ui' => dt('Development user interface; unnecessary overhead.'),
      'journal' => dt('Development utility; unnecessary overhead.'),
      'l10n_client' => dt('Development utility; unnecessary overhead.'),
      'l10n_update' => dt('Development utility; unnecessary overhead.'),
      'macro' => dt('Development utility; unnecessary overhead.'),
      'rules_admin' => dt('Development user interface; unnecessary overhead.'),
      'stringoverrides' => dt('Development utility.'),
      'trace' => dt('Debugging utility; degrades performance and potential security risk.'),
      'upgrade_status' => dt('Development utility for performing a major Drupal core update; should removed after use.'),
      'user_display_ui' => dt('Development user interface; unnecessary overhead.'),
      'util' => dt('Development utility; unnecessary overhead, potential security risk.'),
      'views_ui' => dt('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' => dt('Development utility; unnecessary overhead, potential security risk.'),
    );
    return array_merge($admin_menu_developer_modules, $developer_modules);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
SiteAuditCheckAbstract::$abort protected property Indicate that no other checks should be run after this check.
SiteAuditCheckAbstract::$customCode private static property Use for checking whether custom code paths have been validated.
SiteAuditCheckAbstract::$optOut protected property User has opted out of this check in configuration.
SiteAuditCheckAbstract::$percentOverride protected property If set, will override the Report's percentage.
SiteAuditCheckAbstract::$registry protected property Use for passing data between checks within a report.
SiteAuditCheckAbstract::$score protected property Quantifiable number associated with result on a scale of 0 to 2.
SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_FAIL constant
SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO constant
SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_PASS constant
SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_WARN constant
SiteAuditCheckAbstract::getCustomCodePaths public function Returns an array containing custom code paths or AUDIT_CHECK_SCORE_INFO.
SiteAuditCheckAbstract::getExecPath public function Returns the path of the executable.
SiteAuditCheckAbstract::getOptions public function Returns the values of the valid options for a command.
SiteAuditCheckAbstract::getPercentOverride public function Get the report percent override, if any.
SiteAuditCheckAbstract::getRegistry public function Get the check registry.
SiteAuditCheckAbstract::getRelativePath public function Gives path relative to DRUPAL_ROOT of the path is inside Drupal.
SiteAuditCheckAbstract::getResult public function Determine the result message based on the score.
SiteAuditCheckAbstract::getScore public function Get a quantifiable number representing a check result; lazy initialization.
SiteAuditCheckAbstract::getScoreCssClass public function Get the CSS class associated with a score.
SiteAuditCheckAbstract::getScoreDrushLevel public function Get the Drush message level associated with a score.
SiteAuditCheckAbstract::getScoreLabel public function Get a human readable label for a score.
SiteAuditCheckAbstract::logXmlError public function Logs error if unable to parse XML output.
SiteAuditCheckAbstract::renderAction public function Display action items for a user to perform.
SiteAuditCheckAbstract::shouldAbort public function Determine whether the check failed so badly that the report must stop.
SiteAuditCheckAbstract::__construct public function Constructor.
SiteAuditCheckExtensionsDev::calculateScore public function Implements \SiteAudit\Check\Abstract\calculateScore(). Overrides SiteAuditCheckAbstract::calculateScore
SiteAuditCheckExtensionsDev::getAction public function Implements \SiteAudit\Check\Abstract\getAction(). Overrides SiteAuditCheckAbstract::getAction
SiteAuditCheckExtensionsDev::getDescription public function Implements \SiteAudit\Check\Abstract\getDescription(). Overrides SiteAuditCheckAbstract::getDescription
SiteAuditCheckExtensionsDev::getExtensions public function Get a list of development extension names and reasons.
SiteAuditCheckExtensionsDev::getLabel public function Implements \SiteAudit\Check\Abstract\getLabel(). Overrides SiteAuditCheckAbstract::getLabel
SiteAuditCheckExtensionsDev::getResultFail public function Implements \SiteAudit\Check\Abstract\getResultFail(). Overrides SiteAuditCheckAbstract::getResultFail
SiteAuditCheckExtensionsDev::getResultInfo public function Implements \SiteAudit\Check\Abstract\getResultInfo(). Overrides SiteAuditCheckAbstract::getResultInfo
SiteAuditCheckExtensionsDev::getResultPass public function Implements \SiteAudit\Check\Abstract\getResultPass(). Overrides SiteAuditCheckAbstract::getResultPass
SiteAuditCheckExtensionsDev::getResultWarn public function Implements \SiteAudit\Check\Abstract\getResultWarn(). Overrides SiteAuditCheckAbstract::getResultWarn