Completed
Pull Request — v2 (#6)
by Guillaume
03:49
created

AbstractEntityService::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
c 0
b 0
f 0
rs 10
cc 1
nc 1
nop 2
1
<?php
2
3
namespace ETNA\Doctrine\Entity;
4
5
use Doctrine\ORM\EntityManagerInterface;
6
use Symfony\Component\Validator\Validator\ValidatorInterface;
7
8
abstract class AbstractEntityService
9
{
10
    /** @var EntityManagerInterface L'entity manager */
11
    protected $em;
12
13
    /** @var ValidatorInterface Le service pour la validation des data */
14
    protected $validator;
15
16
    protected function __construct(EntityManagerInterface $em, ValidatorInterface $validator)
17
    {
18
        $this->em        = $em;
19
        $this->validator = $validator;
20
    }
21
22
    /**
23
     * Undocumented function
24
     *
25
     * @param array $datas
26
     * @param array $validation_groups
27
     * @param mixed $entity
0 ignored issues
show
Documentation introduced by
Consider making the type for parameter $entity a bit more specific; maybe use AbstractEntity.
Loading history...
28
     *
29
     * @return array
30
     */
31
    protected function filterDataByValidationGroups(array $datas, array $validation_groups, AbstractEntity $entity)
32
    {
33
        $entity_members_metadatas = $this->validator->getMetadataFor($entity)->members;
34
        $filtered_datas           = [];
35
36
        foreach ($entity_members_metadatas as $field_name => $all_field_metadatas) {
37
            $constraints             = array_shift($all_field_metadatas);
38
            $field_validation_groups = array_keys($constraints->constraintsByGroup);
39
            $is_field_concerned      = !empty(array_intersect($validation_groups, $field_validation_groups));
40
41
            if ($is_field_concerned && isset($datas[$field_name])) {
42
                $filtered_datas[$field_name] = $datas[$field_name];
43
            }
44
        }
45
        return $filtered_datas;
46
    }
47
}
48