Completed
Push — master ( 866f51...341db3 )
by Sebastien
02:33 queued 17s
created

Update::prepare()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 0 Features 0
Metric Value
c 6
b 0
f 0
dl 0
loc 3
rs 10
cc 1
eloc 1
nc 1
nop 0
1
<?php
2
3
namespace Cerbere\Action;
4
5
use Cerbere\Model\Project;
6
use Cerbere\Model\Release;
7
use Cerbere\Model\ReleaseHistory;
8
use Doctrine\Common\Cache\CacheProvider;
9
10
/**
11
 * Class Update
12
 *
13
 * @package Cerbere\Action
14
 */
15
class Update implements ActionInterface
16
{
17
    /**
18
     * @var CacheProvider
19
     */
20
    protected $cache;
21
22
    /**
23
     * Update constructor.
24
     */
25
    public function __construct()
26
    {
27
28
    }
29
30
    /**
31
     * @return CacheProvider
32
     */
33
    public function getCache()
34
    {
35
        return $this->cache;
36
    }
37
38
    /**
39
     * @param CacheProvider $cache
40
     */
41
    public function setCache($cache)
42
    {
43
        $this->cache = $cache;
44
    }
45
46
    /**
47
     * @return string
48
     */
49
    public function getCode()
50
    {
51
        return 'update';
52
    }
53
54
    /**
55
     * @return void
56
     */
57
    public function prepare()
58
    {
59
    }
60
61
    /**
62
     * @param array $projects
63
     * @param array $options
64
     *
65
     * @return array
66
     */
67
    public function process(array $projects, $options = array())
68
    {
69
        $options += array('cache' => true, 'level' => 'all', 'flat' => false);
70
        $reports = array();
71
72
        $release_history = new ReleaseHistory($this->cache);
73
74
        /** @var Project $project */
75
        foreach ($projects as $project) {
76
            $release_history->prepare($project, $options['cache']);
77
            $release_history->compare($project);
78
79
            switch ($options['level']) {
80
                case 'security':
81
                    $level = ReleaseHistory::UPDATE_NOT_SECURE;
82
                    break;
83
                case 'unsupported':
84
                    $level = ReleaseHistory::UPDATE_NOT_SUPPORTED;
85
                    break;
86
                case 'update':
87
                    $level = ReleaseHistory::UPDATE_NOT_CURRENT;
88
                    break;
89
                default:
90
                    $level = ReleaseHistory::UPDATE_CURRENT;
91
            }
92
93
            if ($project->getStatus() <= $level) {
94
                $reports[$project->getProject()] = $this->generateReport($project, $release_history, $options['flat']);
95
            }
96
        }
97
98
        return $reports;
99
    }
100
101
    /**
102
     * @param \Cerbere\Model\Project $project
103
     * @param \Cerbere\Model\ReleaseHistory $release_history
104
     * @param boolean $flat
105
     * @return array
106
     */
107
    protected function generateReport(Project $project, ReleaseHistory $release_history, $flat = false)
108
    {
109
        $report = array(
110
          'project'      => $project->getProject(),
111
          'version'      => $project->getVersion(),
112
          'version_date' => $project->getDatestamp(),
113
          'recommended'  => null,
114
          'dev'          => null,
115
          'status'       => $project->getStatus(),
116
          'status_label' => ReleaseHistory::getStatusLabel($project->getStatus()),
117
          'reason'       => '',
118
        );
119
120
        if ($flat) {
121
            $report['recommended'] = $project->getRecommended();
122
            $report['dev'] = $project->getDevVersion();
123
        } else {
124
            if ($release = $release_history->getRelease($project->getRecommended())) {
125
                $report['recommended'] = $this->getReportFromRelease($release);
126
            }
127
128
            if ($release = $release_history->getRelease($project->getDevVersion())) {
129
                $report['dev'] = $this->getReportFromRelease($release);
130
            }
131
        }
132
133
        if ($reason = $project->getReason()) {
134
            $report['reason'] = $reason;
135
        }
136
137
        return $report;
138
    }
139
140
    /**
141
     * @param \Cerbere\Model\Release $release
142
     * @return array
143
     */
144
    protected function getReportFromRelease(Release $release)
145
    {
146
        return array(
147
          'version'       => $release->getVersion(),
148
          'datestamp'     => $release->getDatestamp(),
149
          'release_link'  => $release->getReleaseLink(),
150
          'download_link' => $release->getDownloadLink(),
151
          'filesize'      => $release->getFilesize(),
152
        );
153
    }
154
}
155