You are here

public function SiteAuditCheckCodebasePhpLOC::calculateScore in Site Audit 8.2

Implements \SiteAudit\Check\Abstract\calculateScore().

Overrides SiteAuditCheckAbstract::calculateScore

File

Check/Codebase/PhpLOC.php, line 119
Contains \SiteAudit\Check\Codebase\PhpLOC.

Class

SiteAuditCheckCodebasePhpLOC
Class SiteAuditCheckCodebasePhpLOC.

Code

public function calculateScore() {

  // Get the path of phploc.
  $phploc_path = $this
    ->getExecPath('phploc');
  if ($phploc_path === '') {
    $this->registry['phploc_path_error'] = TRUE;
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
  }

  // Get the custom code paths.
  $custom_code = $this
    ->getCustomCodePaths();
  if ($custom_code === FALSE) {
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_FAIL;
  }
  if (empty($custom_code)) {
    $this->registry['custom_code'] = TRUE;
    return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
  }

  // Get options.
  $valid_options = array(
    'names' => '*.php,*.module,*.install,*.test,*.inc,*.profile,*.theme',
    'names-exclude' => '*.features.*,*_default.inc,*.ds.inc,*.strongarm.inc,*.panelizer.inc,*_defaults.inc,*.box.inc,*.context.inc,*displays.inc',
  );
  $options = $this
    ->getOptions($valid_options, 'phploc-');
  $temp_file = tempnam(sys_get_temp_dir(), 'site_audit');
  $option_string = " --log-xml={$temp_file}";
  foreach ($options as $option => $value) {
    $option_string .= " --{$option}";
    if ($value !== TRUE) {
      $option_string .= "={$value}";
    }
  }

  // Suppress XML errors which will be handled by try catch instead.
  libxml_use_internal_errors(TRUE);
  foreach ($custom_code as $path) {
    $command = $phploc_path . ' ' . $path . $option_string;
    $process = new Process($command);
    $process
      ->run();
    try {
      $output = simplexml_load_file($temp_file);
      $this->registry['phploc_out'][$path] = $output;
    } catch (Exception $e) {
      $this
        ->logXmlError($path, 'phploc');
      continue;
    }
  }
  return SiteAuditCheckAbstract::AUDIT_CHECK_SCORE_INFO;
}