Completed
Push — 7.x-1.x ( 2f9e3c...1070be )
by Frédéric G.
01:36
created

Module::getInfo()   B

Complexity

Conditions 5
Paths 8

Size

Total Lines 32
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 20
nc 8
nop 0
dl 0
loc 32
rs 8.439
c 0
b 0
f 0
1
<?php
2
/**
3
 * @file
4
 * Module.php
5
 *
6
 * @author: Frédéric G. MARAND <[email protected]>
7
 *
8
 * @copyright (c) 2014 Ouest Systèmes Informatiques (OSInet).
9
 *
10
 * @license General Public License version 2 or later
11
 */
12
13
namespace Drupal\qa\Plugin\Qa\Control\System;
14
15
16
class Module {
17
  public $filename;
18
  public $hidden = FALSE;
19
  public $name;
20
  public $info;
21
  public $type;
22
  public $status;
23
  public $schema_version;
24
  public $weight = 0;
25
  public $required_by = array();
26
  public $requires = array();
27
  public $sort;
28
29
  public static function createFromCore(\stdClass $object) {
30
    $o = new Module();
31
    $rc = new \ReflectionClass(Module::class);
32
33
    /** @var \ReflectionProperty $p */
34
    foreach ($rc->getProperties() as $p) {
35
      $name = $p->getName();
36
      $value = $object->{$name};
37
      $o->{$name} = $value;
38
    }
39
40
    return $o;
41
  }
42
43
  public static function getInfo()  {
44
    $module_data = system_rebuild_module_data();
45
    /** @var Module[] $modules */
46
    $modules = array();
47
48
    /** @var Project[] $projects */
49
    $projects = array();
50
51
    foreach ($module_data as $name => $info) {
52
      $module = Module::createFromCore($info);
53
      if ($module->isHidden()) {
54
        continue;
55
      }
56
      $modules[$name] = $module;
57
      $project_name = $module->getProject();
58
      if (!isset($projects[$project_name])) {
59
        $projects[$project_name] = new Project($project_name);
60
      }
61
      $project = $projects[$project_name];
62
      $project->addModule($module);
63
    }
64
65
    foreach ($projects as &$project) {
66
      $project->sort();
67
    }
68
    ksort($projects);
69
70
    return array(
71
      $modules,
72
      $projects,
73
    );
74
  }
75
76
  public function __toString() {
77
    return $this->name;
78
  }
79
80
  public function getProject() {
81
    if (!isset($this->info['project'])) {
82
      if (isset($this->info['package']) && $this->info['package'] == 'Core') {
83
        $project = 'drupal';
84
      }
85
      else {
86
        $project = 'unknown';
87
      }
88
    }
89
    else {
90
      $project = $this->info['project'];
91
    }
92
93
   return $project;
94
  }
95
96
  public function isHidden() {
97
    return !empty($this->info['hidden']);
98
  }
99
100
  public function isEnabled() {
101
    return !empty($this->status);
102
  }
103
}
104