Test Failed
Branch develop (ac2838)
by Daniel
09:09
created

FormSubmitPatch::__invoke()   B

Complexity

Conditions 5
Paths 4

Size

Total Lines 24
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 16
nc 4
nop 3
dl 0
loc 24
rs 8.5125
c 0
b 0
f 0
1
<?php
2
3
namespace Silverback\ApiComponentBundle\Controller;
4
5
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
6
use Silverback\ApiComponentBundle\Entity\Component\Form\Form;
7
use Silverback\ApiComponentBundle\Entity\Component\Form\FormView;
8
use Symfony\Component\HttpFoundation\Request;
9
use Symfony\Component\HttpFoundation\Response;
10
use Symfony\Component\Routing\Annotation\Route;
11
12
class FormSubmitPatch extends AbstractForm
13
{
14
    /**
15
     * @Route(
16
     *     name="silverback_api_component_form_validate_item",
17
     *     path="/component/forms/{id}/submit.{_format}",
18
     *     requirements={"id"="[^/]+"},
19
     *     defaults={
20
     *         "_api_resource_class"=Form::class,
21
     *         "_api_item_operation_name"="validate_item",
22
     *         "_format"="jsonld"
23
     *     }
24
     * )
25
     * @Method("PATCH")
26
     * @param Request $request
27
     * @param Form $data
28
     * @param string $_format
29
     * @return Response
30
     */
31
    public function __invoke(Request $request, Form $data, string $_format)
32
    {
33
        $form = $this->formFactory->createForm($data);
34
        $formData = $this->deserializeFormData($form, $request->getContent());
35
        $form->submit($formData, false);
36
37
        $dataCount = count($formData);
38
        if ($dataCount === 1) {
39
            $data->setForm(new FormView($form->get(key($formData))->createView()));
40
            return $this->getResponse($data, $_format, $this->getFormValid($data->getForm()));
41
        }
42
43
        $datum = [];
44
        $valid = true;
45
        foreach ($formData as $key => $value) {
46
            $dataItem = clone $data;
47
            $dataItem->setForm(new FormView($form->get($key)->createView()));
48
            $datum[] = $dataItem;
49
            if ($valid && !$this->getFormValid($dataItem->getForm())) {
50
                $valid = false;
51
            }
52
        }
53
54
        return $this->getResponse($datum, $_format, $valid);
55
    }
56
}
57