GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 6f647f...b83f01 )
by Edi
35:48
created

DemoController::demoCreateUserAction()   C

Complexity

Conditions 8
Paths 20

Size

Total Lines 89

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 89
rs 6.9955
c 0
b 0
f 0
cc 8
nc 20
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
Duplication introduced by
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.

Loading history...
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
Duplication introduced by
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.

Loading history...
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
            null,
166
            null,
167
            null,
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
Unused Code introduced by
$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 $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
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