This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | namespace kujaff\VersionsBundle\Service; |
||
4 | |||
5 | use kujaff\VersionsBundle\Model\BundleInformations; |
||
6 | use steevanb\CodeGenerator\PHP\ClassGenerator; |
||
7 | use Symfony\Component\HttpKernel\Bundle\Bundle as BaseBundle; |
||
8 | use Symfony\Component\Yaml\Yaml; |
||
9 | |||
10 | /** |
||
11 | * Generate files to make bundle versionned |
||
12 | */ |
||
13 | class Generator |
||
14 | { |
||
15 | use BundleInformations; |
||
16 | |||
17 | /** |
||
18 | * Return services.yml file path |
||
19 | * |
||
20 | * @param BaseBundle $bundle |
||
21 | * @return string |
||
22 | */ |
||
23 | protected function getYamlFilePath(BaseBundle $bundle) |
||
24 | { |
||
25 | return $bundle->getPath() . DIRECTORY_SEPARATOR . 'Resources' . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'services.yml'; |
||
26 | } |
||
27 | |||
28 | /** |
||
29 | * Parse Yaml service declaration |
||
30 | * |
||
31 | * @param BaseBundle $bundle |
||
32 | * @return array |
||
33 | */ |
||
34 | protected function parseServicesYaml(BaseBundle $bundle) |
||
35 | { |
||
36 | $servicesFilePath = $this->getYamlFilePath($bundle); |
||
37 | $return = array(); |
||
38 | if (file_exists($servicesFilePath)) { |
||
39 | $return = Yaml::parse(file_get_contents($servicesFilePath)); |
||
40 | if ($return === null) { |
||
41 | $return = array(); |
||
42 | } |
||
43 | } |
||
44 | if (array_key_exists('services', $return) === false || is_array($return['services']) === false) { |
||
45 | $return['services'] = array(); |
||
46 | } |
||
47 | return $return; |
||
48 | } |
||
49 | |||
50 | /** |
||
51 | * Return a ClassGenerator |
||
52 | * |
||
53 | * @param BaseBundle $bundleInfos |
||
54 | * @param string $class Class name |
||
55 | * @param string $interface Interface to use, just class name |
||
56 | * @return ClassGenerator |
||
57 | */ |
||
58 | protected function initGenerator(BaseBundle $bundleInfos, $class, $interface) |
||
59 | { |
||
60 | $return = new ClassGenerator(); |
||
61 | $return->setClassName($class); |
||
62 | $return->setNamespace($bundleInfos->getNamespace() . '\Service\Install'); |
||
63 | $return->setTraits(array( |
||
64 | 'kujaff\VersionsBundle\Model\BundleNameFromClassName', |
||
65 | 'kujaff\VersionsBundle\Model\DoctrineHelper', |
||
66 | )); |
||
67 | $return->setExtends('Symfony\Component\DependencyInjection\ContainerAware'); |
||
68 | $return->addUse('kujaff\VersionsBundle\Model\\' . $interface, 'Base' . $interface); |
||
69 | $return->addInterface('Base' . $interface); |
||
70 | $return->setConcatTraits(true); |
||
71 | |||
72 | return $return; |
||
73 | } |
||
74 | |||
75 | /** |
||
76 | * Register an installer service |
||
77 | * |
||
78 | * @param BaseBundle $bundleInfos |
||
79 | * @param string $type Type (install, update or uninstall) |
||
80 | * @param string $class Class (Install, Update or Uninstall) |
||
81 | */ |
||
82 | protected function registerInstallerService(BaseBundle $bundleInfos, $type, $class) |
||
83 | { |
||
84 | $serviceId = strtolower($bundleInfos->getName()) . '.installer.' . $type; |
||
85 | $fullyQualifiedClass = $bundleInfos->getNamespace() . '\Service\Install\\' . $class; |
||
86 | $serviceOptions = array( |
||
87 | 'calls' => array(array('setContainer' => array('@service_container'))), |
||
88 | 'tags' => array(array('name' => 'bundle.' . $type)) |
||
89 | ); |
||
90 | $this->registerService($bundleInfos->getName(), $serviceId, $fullyQualifiedClass, $serviceOptions); |
||
91 | } |
||
92 | |||
93 | /** |
||
94 | * Register a new service in Resources/config/services.yml |
||
95 | * |
||
96 | * @param string $bundle Bundle name, ex 'FooBundle' |
||
97 | * @param string $service Service name, ex 'foobundle.service' |
||
98 | * @param string $class Fully qualified class name, ex 'Foo\Bar\ClassName' |
||
99 | * @param array $options Options, ex array('arguments' => array('@service_container'), 'tags' => array(array('name' => 'bundle.install')) |
||
100 | * @throws \Exception |
||
101 | */ |
||
102 | public function registerService($bundle, $service, $class, $options = array()) |
||
103 | { |
||
104 | $bundleInfos = $this->getBundleInformations($bundle); |
||
105 | $services = $this->parseServicesYaml($bundleInfos); |
||
106 | |||
107 | $services['services'][$service] = array_merge(array('class' => $class), $options); |
||
108 | $yamlFilePath = $this->getYamlFilePath($bundleInfos); |
||
109 | $yamlContent = Yaml::dump($services, 4); |
||
110 | |||
111 | $result = file_put_contents($yamlFilePath, $yamlContent); |
||
112 | if ($result === false) { |
||
113 | throw new \Exception('Error while writing "' . $yamlFilePath . '", maybe directory or file can\'t be written.'); |
||
114 | } |
||
115 | } |
||
116 | |||
117 | /** |
||
118 | * Indicate if a tagged service exists in bundle |
||
119 | * |
||
120 | * @param string $bundle Bundle name, ex 'FooBundle' |
||
121 | * @param string $tag Tag name, ex 'bundle.install' |
||
122 | * @return boolean |
||
123 | */ |
||
124 | public function existsTaggedService($bundle, $tag) |
||
125 | { |
||
126 | $services = $this->parseServicesYaml($this->getBundleInformations($bundle)); |
||
127 | foreach ($services['services'] as $params) { |
||
128 | if (array_key_exists('tags', $params) && is_array($params['tags'])) { |
||
129 | foreach ($params['tags'] as $tagInfos) { |
||
130 | if (array_key_exists('name', $tagInfos) && $tagInfos['name'] == $tag) { |
||
131 | return true; |
||
132 | } |
||
133 | } |
||
134 | } |
||
135 | } |
||
136 | return false; |
||
137 | } |
||
138 | |||
139 | /** |
||
140 | * Generate everything to make your bundle versionned |
||
141 | * |
||
142 | * @param string $bundle Name of your bundle, ex 'FooBundle' |
||
143 | * @param string $versionAfterInstallation Version after installation, ex '1.0.0' |
||
144 | * @param string $updateTrait Trait to use in Update service, like kujaff\VersionsBundle\Model\UpdateOneVersionOneMethod |
||
145 | */ |
||
146 | public function generate($bundle, $versionAfterInstallation, $updateTrait = null, $force = false) |
||
147 | { |
||
148 | $this->generateInstallService($bundle, $versionAfterInstallation, $force); |
||
149 | $this->generateUpdateService($bundle, $updateTrait, $force); |
||
150 | $this->generateUninstallService($bundle, $force); |
||
151 | } |
||
152 | |||
153 | /** |
||
154 | * Generate service and register it for installation |
||
155 | * |
||
156 | * @param string $bundle Name of your bundle, ex 'FooBundle' |
||
157 | * @param string $version Version after installation, ex '1.0.0' |
||
158 | * @param boolean $force Indicate if you want to regenerate it although it exists |
||
159 | * @return boolean |
||
160 | */ |
||
161 | public function generateInstallService($bundle, $version, $force = false) |
||
162 | { |
||
163 | $bundleInfos = $this->getBundleInformations($bundle); |
||
164 | // do not create service if another one is already registered |
||
165 | if ($this->existsTaggedService($bundle, 'bundle.install') && $force === false) { |
||
166 | return false; |
||
167 | } |
||
168 | |||
169 | $generator = $this->initGenerator($bundleInfos, 'Install', 'Install'); |
||
170 | |||
171 | $generator->startMethod('install', ClassGenerator::VISIBILITY_PUBLIC, false, array('Installation'), 'kujaff\VersionsBundle\Entity\Version'); |
||
0 ignored issues
–
show
|
|||
172 | $generator->addMethodLine($generator->getCode4Comment('Do your stuff here')); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
173 | $generator->addMethodLine($generator->getCode4Line('return new Version(\'' . $version . '\');', 0, 0)); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
174 | $generator->finishMethod(); |
||
0 ignored issues
–
show
The method
finishMethod() does not seem to exist on object<steevanb\CodeGenerator\PHP\ClassGenerator> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
175 | |||
176 | $generator->write($bundleInfos->getPath() . DIRECTORY_SEPARATOR . 'Service' . DIRECTORY_SEPARATOR . 'Install' . DIRECTORY_SEPARATOR . 'Install.php'); |
||
177 | |||
178 | $this->registerInstallerService($bundleInfos, 'install', 'Install'); |
||
179 | |||
180 | return true; |
||
181 | } |
||
182 | |||
183 | /** |
||
184 | * @param string $bundle |
||
185 | * @param string $trait |
||
186 | * @param bool $force |
||
187 | * @return bool |
||
188 | * @throws \kujaff\VersionsBundle\Exception\BundleNotFoundException |
||
189 | */ |
||
190 | public function generateUpdateService($bundle, $trait = null, $force = false) |
||
191 | { |
||
192 | $bundleInfos = $this->getBundleInformations($bundle); |
||
193 | // do not create service if another one is already registered |
||
194 | if ($this->existsTaggedService($bundle, 'bundle.update') && $force === false) { |
||
195 | return false; |
||
196 | } |
||
197 | |||
198 | $generator = $this->initGenerator($bundleInfos, 'Update', 'Update'); |
||
199 | |||
200 | if ($trait !== null) { |
||
201 | $generator->addTrait($trait); |
||
202 | } else { |
||
203 | $generator->startMethod('update', ClassGenerator::VISIBILITY_PUBLIC, false, array('Updates'), 'kujaff\VersionsBundle\Entity\Version'); |
||
0 ignored issues
–
show
The method
startMethod() does not seem to exist on object<steevanb\CodeGenerator\PHP\ClassGenerator> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
204 | $generator->addMethodParameter('bundleVersion', 'kujaff\VersionsBundle\Entity\BundleVersion', null, true, 'Current installed version'); |
||
0 ignored issues
–
show
The method
addMethodParameter() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
205 | $generator->addMethodParameter('version', 'kujaff\VersionsBundle\Entity\Version', null, true, 'Update to this version'); |
||
0 ignored issues
–
show
The method
addMethodParameter() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
206 | $generator->addMethodLine($generator->getCode4Comment('Do your stuff here')); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
207 | $generator->addMethodLine($generator->getCode4Comment('Return updated version after your patchs', 0, 0)); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
208 | $generator->addMethodLine($generator->getCode4Line('return $version;', 0, 0)); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
209 | $generator->finishMethod(); |
||
0 ignored issues
–
show
The method
finishMethod() does not seem to exist on object<steevanb\CodeGenerator\PHP\ClassGenerator> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
210 | } |
||
211 | |||
212 | $generator->write($bundleInfos->getPath() . DIRECTORY_SEPARATOR . 'Service' . DIRECTORY_SEPARATOR . 'Install' . DIRECTORY_SEPARATOR . 'Update.php'); |
||
213 | |||
214 | $this->registerInstallerService($bundleInfos, 'update', 'Update'); |
||
215 | |||
216 | return true; |
||
217 | } |
||
218 | |||
219 | /** |
||
220 | * Generate service and register it for uninstall |
||
221 | * |
||
222 | * @param string $bundle Name of your bundle, ex 'FooBundle' |
||
223 | * @param boolean $force Indicate if you want to regenerate it although it exists |
||
224 | * @return boolean |
||
225 | */ |
||
226 | public function generateUninstallService($bundle, $force = false) |
||
227 | { |
||
228 | $bundleInfos = $this->getBundleInformations($bundle); |
||
229 | // do not create service if another one is already registered |
||
230 | if ($this->existsTaggedService($bundle, 'bundle.uninstall') && $force === false) { |
||
231 | return false; |
||
232 | } |
||
233 | |||
234 | $generator = $this->initGenerator($bundleInfos, 'Uninstall', 'Uninstall'); |
||
235 | |||
236 | $generator->startMethod('uninstall', ClassGenerator::VISIBILITY_PUBLIC, false, array('Uninstall')); |
||
0 ignored issues
–
show
The method
startMethod() does not seem to exist on object<steevanb\CodeGenerator\PHP\ClassGenerator> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
237 | $generator->addMethodLine($generator->getCode4Comment('Do your stuff here', 0, 0)); |
||
0 ignored issues
–
show
The method
addMethodLine() does not exist on steevanb\CodeGenerator\PHP\ClassGenerator . Did you maybe mean addMethod() ?
This check marks calls to methods that do not seem to exist on an object. This is most likely the result of a method being renamed without all references to it being renamed likewise. ![]() |
|||
238 | $generator->finishMethod(); |
||
0 ignored issues
–
show
The method
finishMethod() does not seem to exist on object<steevanb\CodeGenerator\PHP\ClassGenerator> .
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces. This is most likely a typographical error or the method has been renamed. ![]() |
|||
239 | |||
240 | $generator->write($bundleInfos->getPath() . DIRECTORY_SEPARATOR . 'Service' . DIRECTORY_SEPARATOR . 'Install' . DIRECTORY_SEPARATOR . 'Uninstall.php'); |
||
241 | |||
242 | $this->registerInstallerService($bundleInfos, 'uninstall', 'Uninstall'); |
||
243 | |||
244 | return true; |
||
245 | } |
||
246 | } |
||
247 |
This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.
This is most likely a typographical error or the method has been renamed.