site_audit-8.x-3.0-rc1/src/Plugin/SiteProperty/SiteAuditStatus.php

src/Plugin/SiteProperty/SiteAuditStatus.php
<?php

namespace Drupal\site_audit\Plugin\SiteProperty;

use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Url;
use Drupal\site\Entity\SiteEntity;
use Drupal\site\SiteInterface;
use Drupal\site\SitePropertyPluginBase;
use Drupal\site_audit\Plugin\SiteAuditCheckBase;
use Drupal\site_audit\Plugin\SiteAuditChecklistBase;

/**
 * Plugin implementation of the site_property.
 *
 * @SiteProperty(
 *   id = "site_audit_status",
 *   name = "site_audit_status",
 *   hidden = true,
 *   label = @Translation("Site Audit Status"),
 *   description = @Translation("The state of Site Audit Report."),
*    site_bundles = {
*      "Drupal\site\Entity\Bundle\DrupalSiteBundle"
*    },
 * )
 */
class SiteAuditStatus extends SitePropertyPluginBase {

  protected $site_audit_state_map = [
    SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS => SiteInterface::SITE_OK,
    SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO => SiteInterface::SITE_INFO,
    SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN => SiteInterface::SITE_WARN,
    SiteAuditCheckBase::AUDIT_CHECK_SCORE_FAIL => SiteInterface::SITE_ERROR,
  ];


  public function state() {
    $site_settings = \Drupal::config('site.settings');
    $state_factors = $site_settings->get('state_factors');

    if (!in_array('site_audit', $state_factors)) {
      return;
    }
    $audit_manager = \Drupal::service('plugin.manager.site_audit_checklist');
    $requirements_options = $site_settings->get('site_audit_required') ?? [];
    $worst_state = SiteAuditCheckBase::AUDIT_CHECK_SCORE_INFO;
    $reasons[] = $site_settings->get('reason');
    if (empty(array_filter($requirements_options))){
      $requirements_options = array_keys($requirements_options);
    }
    foreach (array_filter($requirements_options) as $required_report) {
      /**
       * @var SiteAuditChecklistBase
       */
      $report = $audit_manager->createInstance($required_report);

      if ($report->severity < SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS) {

        $reason_build = [
          '#type' => 'details',
          '#title' => t('Site Audit Report ":requirement" returned a :warning.', [
            ':warning' => SiteEntity::getStateName($this->site_audit_state_map[$report->severity]),
            ':requirement' => $report->getLabel(),
          ]),
          '#description' => t('See <a href=":url">Site Audit: :type</a>', [
            ':url' => Url::fromRoute('site_audit.report')->setAbsolute()->setOptions([
              'fragment' => $required_report,
            ])->toString(),
            ':type' => $report->getLabel(),
          ]),
          '#description_display' => 'after',
        ];

        foreach ($report->getCheckObjects() as $check) {
          $checkBuild = [];
          if ($check->getScore() < SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS)
          if (is_array($check->getResult())) {
            $checkBuild['result'] = $check->getResult();
            $checkBuild['result']['#attributes']['class'] = 'well result';
          }
          else {
            $checkBuild['detail'] = [
              '#type' => 'html_tag',
              '#tag' => 'p',
              '#value' => $check->getResult(),
              '#attributes' => [
                'class' => 'well result',
              ],
            ];
          }

          // Action.
          if ($action = $check->renderAction()) {
            $checkBuild['action'] = [
              '#type' => 'html_tag',
              '#tag' => 'div',
              '#attributes' => [
                'class' => 'well action',
              ],
            ];
            if (!is_array($action)) {
              $checkBuild['action']['text'] = [
                '#type' => 'html_tag',
                '#tag' => 'p',
                '#value' => $action,
              ];
            }
            else {
              $checkBuild['action']['rendered'] = $action;
            }
          }
          $reason_build[$check->getPluginId()] = $checkBuild;
        }

        // @TODO: Dig through the checks to print out the problem and solution.
        $reasons[] = $reason_build;
      }

      if ($report->severity < $worst_state) {
        $worst_state = $report->severity;
      }
    }

    $this->addReason($reasons);
    return $this->site_audit_state_map[$worst_state];
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc