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 | declare(strict_types=1); |
||
4 | |||
5 | namespace Netgen\Bundle\EzFormsBundle\Controller; |
||
6 | |||
7 | use Exception; |
||
8 | use eZ\Bundle\EzPublishCoreBundle\Controller; |
||
9 | use eZ\Publish\API\Repository\Exceptions\InvalidArgumentException; |
||
10 | use eZ\Publish\Core\MVC\Symfony\Routing\UrlAliasRouter; |
||
11 | use Netgen\Bundle\EzFormsBundle\Form\DataWrapper; |
||
12 | use Netgen\Bundle\EzFormsBundle\Form\Payload\InformationCollectionStruct; |
||
13 | use Netgen\Bundle\EzFormsBundle\Form\Type\CreateContentType; |
||
14 | use Netgen\Bundle\EzFormsBundle\Form\Type\CreateUserType; |
||
15 | use Netgen\Bundle\EzFormsBundle\Form\Type\InformationCollectionType; |
||
16 | use Netgen\Bundle\EzFormsBundle\Form\Type\UpdateContentType; |
||
17 | use Netgen\Bundle\EzFormsBundle\Form\Type\UpdateUserType; |
||
18 | use RuntimeException; |
||
19 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; |
||
20 | use Symfony\Component\Form\FormError; |
||
21 | use Symfony\Component\HttpFoundation\Request; |
||
22 | use Symfony\Component\HttpFoundation\Response; |
||
23 | |||
24 | final class DemoController extends Controller |
||
25 | { |
||
26 | public function demoCreateContentAction(Request $request): Response |
||
27 | { |
||
28 | $repository = $this->getRepository(); |
||
29 | $contentService = $repository->getContentService(); |
||
30 | $locationService = $repository->getLocationService(); |
||
31 | // @todo for demo purpose, user should have necessary permissions by itself |
||
32 | $repository->getPermissionResolver()->setCurrentUserReference( |
||
33 | $repository->getUserService()->loadUserByLogin('admin') |
||
34 | ); |
||
35 | $contentType = $repository->getContentTypeService()->loadContentTypeByIdentifier('test_type'); |
||
36 | $contentCreateStruct = $contentService->newContentCreateStruct($contentType, 'eng-GB'); |
||
37 | |||
38 | $data = new DataWrapper($contentCreateStruct, $contentCreateStruct->contentType); |
||
39 | |||
40 | // No method to create named builder in framework controller |
||
41 | /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */ |
||
42 | $formBuilder = $this->container->get('form.factory')->createBuilder(CreateContentType::class, $data); |
||
43 | // Adding controls as EzFormsBundle does not do that by itself |
||
44 | $formBuilder->add('save', SubmitType::class, ['label' => 'Publish']); |
||
45 | |||
46 | $form = $formBuilder->getForm(); |
||
47 | $form->handleRequest($request); |
||
48 | |||
49 | View Code Duplication | if ($form->isSubmitted() && $form->isValid()) { |
|
0 ignored issues
–
show
|
|||
50 | $rootLocation = $locationService->loadLocation(2); |
||
51 | |||
52 | try { |
||
53 | $repository->beginTransaction(); |
||
54 | |||
55 | $contentDraft = $contentService->createContent( |
||
56 | $data->payload, |
||
57 | [ |
||
58 | $locationService->newLocationCreateStruct($rootLocation->id), |
||
59 | ] |
||
60 | ); |
||
61 | |||
62 | $content = $contentService->publishVersion($contentDraft->versionInfo); |
||
63 | |||
64 | $repository->commit(); |
||
65 | } catch (Exception $e) { |
||
66 | $repository->rollback(); |
||
67 | // @todo do something else if needed |
||
68 | throw $e; |
||
69 | } |
||
70 | |||
71 | return $this->redirect( |
||
72 | $this->generateUrl( |
||
73 | UrlAliasRouter::URL_ALIAS_ROUTE_NAME, |
||
74 | [ |
||
75 | 'location' => $locationService->loadLocation( |
||
76 | $content->contentInfo->mainLocationId |
||
77 | ), |
||
78 | ] |
||
79 | ) |
||
80 | ); |
||
81 | } |
||
82 | |||
83 | return $this->render( |
||
84 | '@NetgenEzForms/demo_form.html.twig', |
||
85 | [ |
||
86 | 'form' => $form->createView(), |
||
87 | ] |
||
88 | ); |
||
89 | } |
||
90 | |||
91 | public function demoUpdateContentAction(Request $request): Response |
||
92 | { |
||
93 | $repository = $this->getRepository(); |
||
94 | $contentService = $repository->getContentService(); |
||
95 | $repository->getPermissionResolver()->setCurrentUserReference( |
||
96 | $repository->getUserService()->loadUserByLogin('admin') |
||
97 | ); |
||
98 | $content = $contentService->loadContent(137); |
||
99 | $contentType = $repository->getContentTypeService()->loadContentType($content->contentInfo->contentTypeId); |
||
100 | $contentUpdateStruct = $contentService->newContentUpdateStruct(); |
||
101 | $contentUpdateStruct->initialLanguageCode = 'eng-GB'; |
||
102 | |||
103 | $data = new DataWrapper($contentUpdateStruct, $contentType, $content); |
||
104 | |||
105 | // No method to create named builder in framework controller |
||
106 | /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */ |
||
107 | $formBuilder = $this->container->get('form.factory')->createBuilder(UpdateContentType::class, $data); |
||
108 | // Adding controls as EzFormsBundle does not do that by itself |
||
109 | $formBuilder->add('save', SubmitType::class, ['label' => 'Update']); |
||
110 | |||
111 | $form = $formBuilder->getForm(); |
||
112 | //$form = $this->createForm(UpdateContentType::class, $data); |
||
113 | $form->handleRequest($request); |
||
114 | |||
115 | View Code Duplication | if ($form->isSubmitted() && $form->isValid()) { |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
116 | try { |
||
117 | $repository->beginTransaction(); |
||
118 | |||
119 | $contentDraft = $contentService->createContentDraft($content->contentInfo); |
||
120 | $contentDraft = $contentService->updateContent( |
||
121 | $contentDraft->versionInfo, |
||
122 | $data->payload |
||
123 | ); |
||
124 | $content = $contentService->publishVersion($contentDraft->versionInfo); |
||
125 | |||
126 | $repository->commit(); |
||
127 | } catch (Exception $e) { |
||
128 | $repository->rollback(); |
||
129 | // @todo do something else if needed |
||
130 | throw $e; |
||
131 | } |
||
132 | |||
133 | return $this->redirect( |
||
134 | $this->generateUrl( |
||
135 | UrlAliasRouter::URL_ALIAS_ROUTE_NAME, |
||
136 | [ |
||
137 | 'location' => $this->getRepository()->getLocationService()->loadLocation( |
||
138 | $content->contentInfo->mainLocationId |
||
139 | ), |
||
140 | ] |
||
141 | ) |
||
142 | ); |
||
143 | } |
||
144 | |||
145 | return $this->render( |
||
146 | '@NetgenEzForms/demo_form.html.twig', |
||
147 | [ |
||
148 | 'form' => $form->createView(), |
||
149 | ] |
||
150 | ); |
||
151 | } |
||
152 | |||
153 | public function demoCreateUserAction(Request $request): Response |
||
154 | { |
||
155 | /** @todo check that user really is anonymous, otherwise it does not make sense to allow registration */ |
||
156 | $repository = $this->getRepository(); |
||
157 | $userService = $repository->getUserService(); |
||
158 | $repository->getPermissionResolver()->setCurrentUserReference( |
||
159 | // @todo anonymous requires additional permissions to create new user |
||
160 | $userService->loadUserByLogin('admin') |
||
161 | ); |
||
162 | |||
163 | $contentType = $repository->getContentTypeService()->loadContentTypeByIdentifier('user'); |
||
164 | $userCreateStruct = $userService->newUserCreateStruct( |
||
165 | 'login', |
||
166 | '[email protected]', |
||
167 | 'password', |
||
168 | 'eng-GB', |
||
169 | $contentType |
||
170 | ); |
||
171 | // Setting manually as it is not controlled through form |
||
172 | $userCreateStruct->enabled = false; |
||
173 | |||
174 | $data = new DataWrapper($userCreateStruct, $userCreateStruct->contentType); |
||
175 | |||
176 | // No method to create named builder in framework controller |
||
177 | /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */ |
||
178 | $formBuilder = $this->container->get('form.factory')->createBuilder(CreateUserType::class, $data); |
||
179 | // Adding controls as EzFormsBundle does not do that by itself |
||
180 | $formBuilder->add('save', SubmitType::class, ['label' => 'Publish']); |
||
181 | |||
182 | $form = $formBuilder->getForm(); |
||
183 | $form->handleRequest($request); |
||
184 | |||
185 | if ($form->isSubmitted() && $form->isValid()) { |
||
186 | /** @todo ensure that user can create 'user' type under required UserGroup Location */ |
||
187 | $userGroup = $userService->loadUserGroup(13); |
||
188 | |||
189 | try { |
||
190 | $user = $userService->createUser( |
||
191 | $data->payload, |
||
192 | [$userGroup] |
||
193 | ); |
||
194 | |||
195 | // @todo send confirmation email and redirect to proper location (enter confirmation code or something) |
||
196 | |||
197 | return $this->redirect( |
||
198 | $this->generateUrl( |
||
199 | UrlAliasRouter::URL_ALIAS_ROUTE_NAME, |
||
200 | [ |
||
201 | 'location' => $this->getRepository()->getLocationService()->loadLocation( |
||
202 | $user->contentInfo->mainLocationId |
||
203 | ), |
||
204 | ] |
||
205 | ) |
||
206 | ); |
||
207 | } catch (InvalidArgumentException $e) { |
||
208 | // There is no better way to do this ATM... |
||
209 | $existingUsernameMessage = "Argument 'userCreateStruct' is invalid: User with provided login already exists"; |
||
210 | if ($e->getMessage() === $existingUsernameMessage) { |
||
211 | // Search for the first ezuser field type in content type |
||
212 | foreach ($userCreateStruct->contentType->getFieldDefinitions() as $fieldDefinition) { |
||
213 | if ($fieldDefinition->fieldTypeIdentifier === 'ezuser') { |
||
214 | $userFieldDefinition = $fieldDefinition; |
||
215 | |||
216 | break; |
||
217 | } |
||
218 | } |
||
219 | |||
220 | // UserService validates for this, but it happens AFTER existing username validation |
||
221 | if (!isset($userFieldDefinition)) { |
||
222 | throw new RuntimeException("Could not find 'ezuser' field."); |
||
223 | } |
||
224 | |||
225 | $form->get($userFieldDefinition->identifier)->addError( |
||
226 | new FormError('User with provided username already exists.') |
||
227 | ); |
||
228 | } else { |
||
229 | // @todo do something else if needed |
||
230 | throw $e; |
||
231 | } |
||
232 | } |
||
233 | } |
||
234 | |||
235 | return $this->render( |
||
236 | '@NetgenEzForms/demo_form.html.twig', |
||
237 | [ |
||
238 | 'form' => $form->createView(), |
||
239 | ] |
||
240 | ); |
||
241 | } |
||
242 | |||
243 | public function demoUpdateUserAction(Request $request): Response |
||
244 | { |
||
245 | $repository = $this->getRepository(); |
||
246 | $userService = $repository->getUserService(); |
||
247 | $contentService = $repository->getContentService(); |
||
248 | |||
249 | // @todo check that user is really logged in, it should have permissions to self edit |
||
250 | $repository->getPermissionResolver()->setCurrentUserReference( |
||
251 | $repository->getUserService()->loadUserByLogin('admin') |
||
252 | ); |
||
253 | |||
254 | /** @todo load current user */ |
||
255 | $user = $userService->loadUser(142); |
||
256 | $contentType = $repository->getContentTypeService()->loadContentTypeByIdentifier('user'); |
||
257 | $contentUpdateStruct = $contentService->newContentUpdateStruct(); |
||
258 | $contentUpdateStruct->initialLanguageCode = 'eng-GB'; |
||
259 | $userUpdateStruct = $userService->newUserUpdateStruct(); |
||
260 | $userUpdateStruct->contentUpdateStruct = $contentUpdateStruct; |
||
261 | |||
262 | $data = new DataWrapper($userUpdateStruct, $contentType, $user); |
||
263 | |||
264 | // No method to create named builder in framework controller |
||
265 | /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */ |
||
266 | $formBuilder = $this->container->get('form.factory')->createBuilder(UpdateUserType::class, $data); |
||
267 | // Adding controls as EzFormsBundle does not do that by itself |
||
268 | $formBuilder->add('save', SubmitType::class, ['label' => 'Update']); |
||
269 | |||
270 | $form = $formBuilder->getForm(); |
||
271 | $form->handleRequest($request); |
||
272 | |||
273 | if ($form->isSubmitted() && $form->isValid()) { |
||
274 | $user = $userService->updateUser($user, $userUpdateStruct); |
||
275 | |||
276 | return $this->redirect( |
||
277 | $this->generateUrl( |
||
278 | UrlAliasRouter::URL_ALIAS_ROUTE_NAME, |
||
279 | [ |
||
280 | 'location' => $this->getRepository()->getLocationService()->loadLocation( |
||
281 | $user->contentInfo->mainLocationId |
||
282 | ), |
||
283 | ] |
||
284 | ) |
||
285 | ); |
||
286 | } |
||
287 | |||
288 | return $this->render( |
||
289 | '@NetgenEzForms/demo_form.html.twig', |
||
290 | [ |
||
291 | 'form' => $form->createView(), |
||
292 | ] |
||
293 | ); |
||
294 | } |
||
295 | |||
296 | public function demoInformationCollectionAction(Request $request): Response |
||
297 | { |
||
298 | $repository = $this->getRepository(); |
||
299 | $contentService = $repository->getContentService(); |
||
300 | // @todo for demo purpose, user should have necessary permissions by itself |
||
301 | $repository->getPermissionResolver()->setCurrentUserReference( |
||
302 | $repository->getUserService()->loadUserByLogin('admin') |
||
303 | ); |
||
304 | |||
305 | $content = $contentService->loadContent(126); |
||
306 | $contentTypeId = $content->versionInfo->contentInfo->contentTypeId; |
||
307 | $contentType = $repository->getContentTypeService()->loadContentType($contentTypeId); |
||
308 | |||
309 | $informationCollection = new InformationCollectionStruct(); |
||
310 | |||
311 | $data = new DataWrapper($informationCollection, $contentType); |
||
312 | |||
313 | // No method to create named builder in framework controller |
||
314 | /** @var \Symfony\Component\Form\FormBuilderInterface $formBuilder */ |
||
315 | $formBuilder = $this->container->get('form.factory')->createBuilder(InformationCollectionType::class, $data); |
||
316 | // Adding controls as EzFormsBundle does not do that by itself |
||
317 | $formBuilder->add('save', SubmitType::class, ['label' => 'Publish']); |
||
318 | |||
319 | $form = $formBuilder->getForm(); |
||
320 | $form->handleRequest($request); |
||
321 | |||
322 | if ($form->isSubmitted() && $form->isValid()) { |
||
323 | /** @var InformationCollectionStruct $data */ |
||
324 | $data = $form->getData()->payload; |
||
0 ignored issues
–
show
$data is not used, you could remove the assignment.
This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently. $myVar = 'Value';
$higher = false;
if (rand(1, 6) > 3) {
$higher = true;
} else {
$higher = false;
}
Both the ![]() |
|||
325 | // save data to database |
||
326 | // or something else |
||
327 | // this is left for end developer |
||
328 | } |
||
329 | |||
330 | return $this->render( |
||
331 | '@NetgenEzForms/demo_form.html.twig', |
||
332 | [ |
||
333 | 'form' => $form->createView(), |
||
334 | ] |
||
335 | ); |
||
336 | } |
||
337 | } |
||
338 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.