Completed
Push — 7.x-1.x ( 18d8f3...5a6692 )
by Frédéric G.
01:16
created

ProjectsScanner::create()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @file
4
 * Project.php
5
 *
6
 * @author: Frédéric G. MARAND <[email protected]>
7
 *
8
 * @copyright (c) 2018 Ouest Systèmes Informatiques (OSInet).
9
 *
10
 * @license General Public License version 2 or later
11
 */
12
13
namespace OSInet\DrupalQA\System;
14
15
/**
16
 * Class ProjectsScanner scans projects for actual usage.
17
 *
18
 * @package OSInet\DrupalQA\System
19
 */
20
class ProjectsScanner {
21
22
  protected $projects = [];
23
24
  /**
25
   * Legacy method to load projects.
26
   *
27
   * Mostly used to double-check normal results.
28
   *
29
   * @see \OSInet\DrupalQA\System\ProjectsScanner::loadList()
30
   *
31
   * @internal
32
   */
33
  protected function loadListLegacy() {
34
    global $conf;
35
    drupal_static_reset('update_get_projects');
36
    $savedUpdateCheck = $conf['update_check_disabled'];
37
    $conf['update_check_disabled'] = TRUE;
38
    $projects = update_get_projects();
39
    $conf['update_check_disabled'] = $savedUpdateCheck;
40
    return $projects;
41
  }
42
43
  public static function loadList() {
44
    list(, $projects) =  Module::getInfo();
45
    return $projects;
46
  }
47
48
  public static function create() {
49
  }
50
51
  public function scan(bool $onlyUnused = FALSE): array {
52
    if (empty($this->projects)) {
53
      $this->projects = static::loadList();
54
    }
55
56
    $result = [];
57
58
    /**
59
     * @var string $name
60
     * @var \OSInet\DrupalQA\System\Project $project
61
     */
62
    foreach ($this->projects as $name => $project) {
63
      $count = $project->useCount();
64
      if ($onlyUnused && $count) {
65
        continue;
66
      }
67
68
      $components = array_reduce($project->modules, function (array $accu, Module $module) {
69
        $accu[$module->name] = $module->isEnabled();
70
        return $accu;
71
      }, []);
72
      $result[$name] = ['components' => $components];
73
74
      // If $onlyUsed, all counts are 0, so useless.
75
      if (!$onlyUnused) {
76
        $result[$name]['usage'] = $count;
77
        }
78
    }
79
80
    return $result;
81
  }
82
}