You are here

abstract class SiteAuditReportBase in Site Audit 8.3

Base class for Site Audit Report plugins.

Hierarchy

Expanded class hierarchy of SiteAuditReportBase

13 files declare their use of SiteAuditReportBase
BestPractices.php in src/Plugin/SiteAuditReport/BestPractices.php
Block.php in src/Plugin/SiteAuditReport/Block.php
Cache.php in src/Plugin/SiteAuditReport/Cache.php
Codebase.php in src/Plugin/SiteAuditReport/Codebase.php
Content.php in src/Plugin/SiteAuditReport/Content.php

... See full list

File

src/Plugin/SiteAuditReportBase.php, line 11

Namespace

Drupal\site_audit\Plugin
View source
abstract class SiteAuditReportBase extends PluginBase implements SiteAuditReportInterface {
  use StringTranslationTrait;

  /**
   * Individual check objects.
   *
   * @var array
   */
  protected $checks;

  /**
   * Percentage pass.
   *
   * @var int
   */
  protected $percent;

  /**
   * Maximum score.
   *
   * @var int
   */
  protected $scoreMax = 0;

  /**
   * Total score.
   *
   * @var int
   */
  protected $scoreTotal = 0;

  /**
   * Flag to indicate whether any of the checks are a complete FAIL.
   *
   * @var bool
   */
  protected $hasFail = FALSE;

  /**
   * Container that's passed between each Check.
   *
   * @var array
   */
  protected $registry;

  /**
   * Get the complete name of the report.
   *
   * @return string
   *   The report name.
   */
  protected function getReportName() {
    return $this
      ->getPluginDefinition()['name'];
  }

  /**
   * Get the label(name) for the report.
   */
  public function getLabel() {
    return $this
      ->getPluginDefinition()['name'];
  }

  /**
   * Get the description for the report.
   */
  public function getDescription() {
    return $this
      ->getPluginDefinition()['description'];
  }

  /**
   * Get the percentage score for the report.
   */
  public function getPercent() {
    return $this->percent ?: SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO;
  }

  /**
   * Constructor.
   *
   * @param array $registry
   *   Aggregates data from each individual check.
   * @param bool $opt_out
   *   If set, will not perform checks.
   */
  public function __construct($configuration, $plugin_id, $plugin_definition) {
    $checkManager = \Drupal::service('plugin.manager.site_audit_check');
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->registry = new \stdClass();
    $percent_override = NULL;
    $checks_to_skip = [];
    $checks_to_perform = $this
      ->getChecksList();
    foreach ($checks_to_perform as $key => $check_name) {
      if (in_array($key, $checks_to_skip)) {
        unset($checks_to_perform[$key]);
      }
    }
    if (empty($checks_to_perform)) {
      $this_def = $this
        ->getPluginDefinition();

      // Throw new \RuntimeException(t('No checks are available for report \'@id\'!', ['@id' => $this_def['id']]));.
    }
    $config = \Drupal::config('site_audit');
    foreach ($checks_to_perform as $check_id) {
      $opt_out = $config
        ->get('opt_out.' . $this
        ->getPluginId() . $check_id) != NULL;
      $check = $checkManager
        ->createInstance($check_id, [
        'registry' => $this->registry,
        'opt_out' => $opt_out,
        'options' => $this->configuration,
      ]);

      // Calculate score.
      if ($check
        ->getScore() != SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO) {

        // Mark if there's a major failure.
        if ($check
          ->getScore() == SiteAuditCheckBase::AUDIT_CHECK_SCORE_FAIL) {
          $this->hasFail = TRUE;
        }

        // Total.
        $this->scoreTotal += $check
          ->getScore();

        // Maximum.
        $this->scoreMax += SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS;
      }

      // Allow Report percentage to be overridden.
      if ($check
        ->getPercentOverride()) {
        $percent_override = $check
          ->getPercentOverride();
      }

      // Store all checks.
      $this->checks[$check_id] = $check;

      // Abort the loop if the check says to bail.
      if ($check
        ->shouldAbort()) {
        break;
      }
    }
    if ($percent_override) {
      $this->percent = $percent_override;
    }
    else {
      if ($this->scoreMax != 0) {
        $this->percent = round($this->scoreTotal / $this->scoreMax * 100);
      }
    }
  }

  /**
   * Returns a list of checks for this report.
   */
  public function getChecksList() {
    $this_def = $this
      ->getPluginDefinition();
    $checkManager = \Drupal::service('plugin.manager.site_audit_check');
    static $checkDefinitions = NULL;
    if (empty($checkDefinitions)) {
      $checkDefinitions = $checkManager
        ->getDefinitions();
    }
    $checksInReport = [];
    foreach ($checkDefinitions as $checkDefinition) {
      if ($checkDefinition['report'] == $this_def['id']) {

        // This check belongs to this report.
        $checksInReport[$checkDefinition['id']] = $checkDefinition;
      }
    }
    uasort($checksInReport, [
      $this,
      'weightKeySort',
    ]);
    $checks = [];
    foreach ($checksInReport as $check) {
      $checks[] = $check['id'];
    }
    return $checks;
  }

  /**
   * Sort by weight.
   */
  public function weightKeySort($a, $b) {
    if ($a['weight'] > $b['weight']) {
      return 1;
    }
    elseif ($a['weight'] < $b['weight']) {
      return -1;
    }

    // They have the same weight, sort by id.
    return strcmp($a['id'], $b['id']);
  }

  /**
   * Returns an array of check objects.
   */
  public function getCheckObjects() {
    return $this->checks;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
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.
SiteAuditReportBase::$checks protected property Individual check objects.
SiteAuditReportBase::$hasFail protected property Flag to indicate whether any of the checks are a complete FAIL.
SiteAuditReportBase::$percent protected property Percentage pass.
SiteAuditReportBase::$registry protected property Container that's passed between each Check.
SiteAuditReportBase::$scoreMax protected property Maximum score.
SiteAuditReportBase::$scoreTotal protected property Total score.
SiteAuditReportBase::getCheckObjects public function Returns an array of check objects.
SiteAuditReportBase::getChecksList public function Returns a list of checks for this report.
SiteAuditReportBase::getDescription public function Get the description for the report.
SiteAuditReportBase::getLabel public function Get the label(name) for the report.
SiteAuditReportBase::getPercent public function Get the percentage score for the report.
SiteAuditReportBase::getReportName protected function Get the complete name of the report.
SiteAuditReportBase::weightKeySort public function Sort by weight.
SiteAuditReportBase::__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.