Completed
Push — 1.0 ( 19d976...2156a0 )
by Valentin
05:35
created

LanguageManager   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 135
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 0 Features 2
Metric Value
wmc 17
c 2
b 0
f 2
lcom 1
cbo 5
dl 0
loc 135
ccs 48
cts 48
cp 1
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A setLogger() 0 4 1
A exists() 0 10 2
A create() 0 18 3
A update() 0 11 2
A createOrUpdate() 0 11 3
A remove() 0 17 4
1
<?php
2
3
/*
4
 * This file is part of Transfer.
5
 *
6
 * For the full copyright and license information, please view the LICENSE file located
7
 * in the root directory.
8
 */
9
10
namespace Transfer\EzPlatform\Repository\Manager;
11
12
use eZ\Publish\API\Repository\Exceptions\InvalidArgumentException;
13
use eZ\Publish\API\Repository\Exceptions\NotFoundException;
14
use eZ\Publish\API\Repository\LanguageService;
15
use eZ\Publish\API\Repository\Repository;
16
use eZ\Publish\API\Repository\Values\Content\Language;
17
use Psr\Log\LoggerAwareInterface;
18
use Psr\Log\LoggerInterface;
19
use Transfer\Data\ObjectInterface;
20
use Transfer\Data\ValueObject;
21
use Transfer\EzPlatform\Data\LanguageObject;
22
use Transfer\EzPlatform\Repository\Manager\Type\CreatorInterface;
23
use Transfer\EzPlatform\Repository\Manager\Type\RemoverInterface;
24
use Transfer\EzPlatform\Repository\Manager\Type\UpdaterInterface;
25
26
/**
27
 * Content type manager.
28
 *
29
 * @internal
30
 *
31
 * @author Harald Tollefsen <[email protected]>
32
 */
33
class LanguageManager implements LoggerAwareInterface, CreatorInterface, UpdaterInterface, RemoverInterface
34
{
35
    /**
36
     * @var Repository
37
     */
38
    private $repository;
39
40
    /**
41
     * @var LoggerInterface Logger
42
     */
43
    private $logger;
44
45
    /**
46
     * @var LanguageService Language service
47
     */
48
    private $languageService;
49
50
    /**
51
     * @param Repository $repository
52
     */
53 5
    public function __construct(Repository $repository)
54
    {
55 5
        $this->repository = $repository;
56 5
        $this->languageService = $repository->getContentLanguageService();
57 5
    }
58
59
    /**
60
     * {@inheritdoc}
61
     */
62 2
    public function setLogger(LoggerInterface $logger)
63
    {
64 2
        $this->logger = $logger;
65 2
    }
66
67
    /**
68
     * Checks if language exists without throwing exceptions.
69
     *
70
     * @param string $code
71
     *
72
     * @return bool
73
     */
74 3
    public function exists($code)
75
    {
76
        try {
77 3
            $this->findByCode($code);
78 3
        } catch (\Exception $e) {
79 3
            return false;
80
        }
81
82 3
        return true;
83
    }
84
85
    /**
86
     * @param $code
87
     *
88
     * @return Language
89
     */
90 18
    public function findByCode($code)
91
    {
92 18
        return $this->languageService->loadLanguage($code);
93
    }
94
95
    /**
96
     * {@inheritdoc}
97
     */
98 15
    public function create(ObjectInterface $object)
99
    {
100 15
        if (!$object instanceof LanguageObject) {
101 1
            return;
102
        }
103
104
        try {
105 14
            $language = $this->findByCode($object->data['code']);
106 11
            $this->languageService->enableLanguage($language);
107 14
        } catch (NotFoundException $notFoundException) {
108 4
            $languageCreateStruct = $this->languageService->newLanguageCreateStruct();
109 4
            $languageCreateStruct->languageCode = $object->data['code'];
110 4
            $languageCreateStruct->name = $object->data['name'];
111 4
            $this->languageService->createLanguage($languageCreateStruct);
112
        }
113
114 14
        return new ValueObject($this->findByCode($object->data['code']));
115
    }
116
117
    /**
118
     * {@inheritdoc}
119
     */
120 5
    public function update(ObjectInterface $object)
121
    {
122 5
        if (!$object instanceof LanguageObject) {
123 1
            return;
124
        }
125
126 4
        $language = $this->findByCode($object->data['code']);
127 4
        $this->languageService->updateLanguageName($language, $object->data['name']);
128
129 4
        return new ValueObject($this->findByCode($object->data['code']));
130
    }
131
132
    /**
133
     * {@inheritdoc}
134
     */
135 4
    public function createOrUpdate(ObjectInterface $object)
136
    {
137 4
        if (!$object instanceof LanguageObject) {
138 1
            return;
139
        }
140 3
        if (!$this->exists($object->data['code'])) {
141 2
            return $this->create($object);
142 4
        } else {
143 3
            return $this->update($object);
144
        }
145
    }
146
147
    /**
148
     * {@inheritdoc}
149
     */
150 5
    public function remove(ObjectInterface $object)
151
    {
152 4
        if (!$object instanceof LanguageObject) {
153 1
            return;
154
        }
155
156
        try {
157 3
            $language = $this->findByCode($object->data['code']);
158 2
            $this->languageService->deleteLanguage($language);
159 3
        } catch (NotFoundException $notFoundException) {
160 1
            return true;
161 1
        } catch (InvalidArgumentException $notFoundException) {
162 5
            return false;
163
        }
164
165 1
        return true;
166
    }
167
}
168