Passed
Branch master (c65ffc)
by Dāvis
03:08
created

Manager   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 63
rs 10
wmc 13

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getField() 0 3 1
A setField() 0 4 1
A __construct() 0 3 1
A getNewTranslatedFields() 0 8 2
A getTranslatedFields() 0 10 2
B persistTranslations() 0 18 6
1
<?php
2
3
namespace Sludio\HelperBundle\Translatable\Helper;
4
5
use Doctrine\Common\Persistence\ObjectRepository;
6
use Doctrine\ORM\EntityManager;
7
use Sludio\HelperBundle\Translatable\Entity\BaseEntity;
8
use Symfony\Bridge\Doctrine\RegistryInterface;
9
use Symfony\Component\Form\FormInterface;
10
11
class Manager
12
{
13
    /**
14
     * @var EntityManager
15
     */
16
    protected $entityManager;
17
18
    public function __construct(RegistryInterface $registry)
19
    {
20
        $this->entityManager = $registry->getManager();
21
    }
22
23
    private function getField(BaseEntity $entity, $field, $locale)
24
    {
25
        return $entity->getVariableByLocale($field, $locale);
26
    }
27
28
    private function setField($entity, $field, $value)
29
    {
30
        $setterFunctionName = 'set'.$field;
31
        $entity->{$setterFunctionName}($value);
32
    }
33
34
    public function getTranslatedFields($class, $field, $identifier, $locales)
35
    {
36
        $entity = $this->entityManager->getRepository($class)->find($identifier);
37
38
        $translated = [];
39
        foreach ($locales as $locale) {
40
            $translated[$locale][$field] = $this->getField($entity, $field, $locale);
41
        }
42
43
        return $translated;
44
    }
45
46
    public function getNewTranslatedFields($field, $locales)
47
    {
48
        $translated = [];
49
        foreach ($locales as $locale) {
50
            $translated[$locale][$field] = '';
51
        }
52
53
        return $translated;
54
    }
55
56
    public function persistTranslations(FormInterface $form, $class, $field, $identifier, $locales)
57
    {
58
        $translations = $form->getData();
59
60
        $repository = $this->entityManager->getRepository($class);
61
        /** @var $entity BaseEntity */
62
        if (!$identifier) {
63
            $entity = new $class();
64
        } else {
65
            $entity = $repository->find($identifier);
66
        }
67
68
        foreach ($locales as $locale) {
69
            if (array_key_exists($locale, $translations) && ($translations[$locale] !== null)) {
70
                $postedValue = $translations[$locale];
71
                if ($this->getField($entity, $field, $locale) !== $postedValue) {
72
                    $lang = explode('_', $locale);
73
                    $entity->__set($field.ucfirst(reset($lang)), $postedValue);
74
                }
75
            }
76
        }
77
    }
78
}
79