Completed
Push — 2.x ( dc834d...91b37b )
by
unknown
02:07
created

BundleMetadata::buildInformation()   B

Complexity

Conditions 4
Paths 4

Size

Total Lines 33
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 6
Bugs 2 Features 1
Metric Value
c 6
b 2
f 1
dl 0
loc 33
rs 8.5806
cc 4
eloc 20
nc 4
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Sonata Project package.
5
 *
6
 * (c) Thomas Rabaix <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sonata\EasyExtendsBundle\Bundle;
13
14
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
15
16
class BundleMetadata
17
{
18
    /**
19
     * @var BundleInterface
20
     */
21
    protected $bundle;
22
23
    /**
24
     * @var string|bool
25
     */
26
    protected $vendor = false;
27
28
    /**
29
     * @var bool
30
     */
31
    protected $valid = false;
32
33
    /**
34
     * @var string
35
     */
36
    protected $namespace;
37
38
    /**
39
     * @var string
40
     */
41
    protected $name;
42
43
    /**
44
     * @var bool
45
     */
46
    protected $extendedDirectory = false;
47
48
    /**
49
     * @var bool
50
     */
51
    protected $extendedNamespace = false;
52
53
    /**
54
     * @var array
55
     */
56
    protected $configuration = array();
57
58
    /**
59
     * @var OrmMetadata
60
     */
61
    protected $ormMetadata = null;
62
63
    /**
64
     * @var OdmMetadata
65
     */
66
    protected $odmMetadata = null;
67
68
    /**
69
     * @var PhpcrMetadata
70
     */
71
    protected $phpcrMetadata = null;
72
73
    /**
74
     * @param BundleInterface $bundle
75
     * @param array           $configuration
76
     */
77
    public function __construct(BundleInterface $bundle, array $configuration = array())
78
    {
79
        $this->bundle = $bundle;
80
        $this->configuration = $configuration;
81
82
        $this->buildInformation();
83
    }
84
85
    /**
86
     * @return bool
87
     */
88
    public function isExtendable()
89
    {
90
        // does not extends Application bundle ...
91
        return !(
92
            strpos($this->getClass(), 'Application') === 0
93
            || strpos($this->getClass(), 'Symfony') === 0
94
        );
95
    }
96
97
    /**
98
     * @return string
99
     */
100
    public function getClass()
101
    {
102
        return get_class($this->bundle);
103
    }
104
105
    /**
106
     * @return bool
107
     */
108
    public function isValid()
109
    {
110
        return $this->valid;
111
    }
112
113
    /**
114
     * @return string
115
     */
116
    public function getExtendedDirectory()
117
    {
118
        return $this->extendedDirectory;
119
    }
120
121
    /**
122
     * @return string
123
     */
124
    public function getVendor()
125
    {
126
        return $this->vendor;
127
    }
128
129
    /**
130
     * @return string
131
     */
132
    public function getExtendedNamespace()
133
    {
134
        return $this->extendedNamespace;
135
    }
136
137
    /**
138
     * @return string
139
     */
140
    public function getNamespace()
141
    {
142
        return $this->namespace;
143
    }
144
145
    /**
146
     * return the bundle name.
147
     *
148
     * @return string return the bundle name
149
     */
150
    public function getName()
151
    {
152
        return $this->name;
153
    }
154
155
    /**
156
     * @return BundleInterface
157
     */
158
    public function getBundle()
159
    {
160
        return $this->bundle;
161
    }
162
163
    /**
164
     * @return OdmMetadata
165
     */
166
    public function getOdmMetadata()
167
    {
168
        return $this->odmMetadata;
169
    }
170
171
    /**
172
     * @return OrmMetadata
173
     */
174
    public function getOrmMetadata()
175
    {
176
        return $this->ormMetadata;
177
    }
178
179
    /**
180
     * @return PhpcrMetadata
181
     */
182
    public function getPhpcrMetadata()
183
    {
184
        return $this->phpcrMetadata;
185
    }
186
187
    /**
188
     * build basic information and check if the bundle respect the following convention
189
     *   Vendor/BundleNameBundle/VendorBundleNameBundle.
190
     *
191
     * if the bundle does not respect this convention then the easy extends command will ignore
192
     * this bundle
193
     */
194
    protected function buildInformation()
195
    {
196
        $information = explode('\\', $this->getClass());
197
198
        if (!$this->isExtendable()) {
199
            $this->valid = false;
200
201
            return;
202
        }
203
204
        if (count($information) != 3) {
205
            $this->valid = false;
206
207
            return;
208
        }
209
210
        if ($information[0].$information[1] != $information[2]) {
211
            $this->valid = false;
212
213
            return;
214
        }
215
216
        $this->name = $information[count($information) - 1];
217
        $this->vendor = $information[0];
218
        $this->namespace = sprintf('%s\%s', $this->vendor, $information[1]);
219
        $this->extendedDirectory = sprintf('%s/%s/%s', $this->configuration['application_dir'], $this->vendor, $information[1]);
0 ignored issues
show
Documentation Bug introduced by
The property $extendedDirectory was declared of type boolean, but sprintf('%s/%s/%s', $thi...endor, $information[1]) is of type string. Maybe add a type cast?

This check looks for assignments to scalar types that may be of the wrong type.

To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.

$answer = 42;

$correct = false;

$correct = (bool) $answer;
Loading history...
220
        $this->extendedNamespace = sprintf('Application\\%s\\%s', $this->vendor, $information[1]);
0 ignored issues
show
Documentation Bug introduced by
The property $extendedNamespace was declared of type boolean, but sprintf('Application\\%s...endor, $information[1]) is of type string. Maybe add a type cast?

This check looks for assignments to scalar types that may be of the wrong type.

To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.

$answer = 42;

$correct = false;

$correct = (bool) $answer;
Loading history...
221
        $this->valid = true;
222
223
        $this->ormMetadata = new OrmMetadata($this);
224
        $this->odmMetadata = new OdmMetadata($this);
225
        $this->phpcrMetadata = new PhpcrMetadata($this);
226
    }
227
}
228