WidgetBusinessUnitSelectConverter   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 98
Duplicated Lines 8.16 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 6
Bugs 3 Features 5
Metric Value
wmc 15
lcom 1
cbo 6
dl 8
loc 98
rs 10
c 6
b 3
f 5

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A getConvertedValue() 8 8 2
A getFormValue() 0 8 2
A getViewValue() 0 4 2
C getBusinessUnitList() 0 24 7
A applyAdditionalConditions() 0 4 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace Oro\Bundle\DashboardBundle\Provider\Converters;
4
5
use Doctrine\ORM\EntityRepository;
6
use Doctrine\ORM\QueryBuilder;
7
8
use Oro\Bundle\DashboardBundle\Provider\ConfigValueConverterAbstract;
9
use Oro\Bundle\SecurityBundle\SecurityFacade;
10
use Oro\Bundle\OrganizationBundle\Provider\BusinessUnitAclProvider;
11
12
/**
13
 * Class WidgetBusinessUnitSelectConverter
14
 * @package Oro\Bundle\DashboardBundle\Provider\Converters
15
 */
16
class WidgetBusinessUnitSelectConverter extends ConfigValueConverterAbstract
17
{
18
    /** @var EntityRepository */
19
    protected $businessUnitRepository;
20
21
    /** @var SecurityFacade */
22
    protected $securityFacade;
23
24
    /** @var BusinessUnitAclProvider */
25
    protected $businessUnitAclProvider;
26
27
    /**
28
     * @param EntityRepository $businessUnitRepository
29
     * @param SecurityFacade $securityFacade
30
     * @param BusinessUnitAclProvider $businessUnitAclProvider
31
     */
32
    public function __construct(
33
        EntityRepository $businessUnitRepository,
34
        SecurityFacade $securityFacade,
35
        BusinessUnitAclProvider $businessUnitAclProvider
36
    ) {
37
        $this->businessUnitRepository = $businessUnitRepository;
38
        $this->securityFacade = $securityFacade;
39
        $this->businessUnitAclProvider = $businessUnitAclProvider;
40
    }
41
42
    /**
43
     * {@inheritdoc}
44
     */
45 View Code Duplication
    public function getConvertedValue(array $widgetConfig, $value = null, array $config = [], array $options = [])
46
    {
47
        if ($value === null) {
48
            return $this->getBusinessUnitList($config);
49
        }
50
51
        return parent::getConvertedValue($widgetConfig, $value, $config, $options);
52
    }
53
54
    /**
55
     * {@inheritdoc}
56
     */
57
    public function getFormValue(array $converterAttributes, $value)
58
    {
59
        if ($value === null) {
60
            return $this->getBusinessUnitList($converterAttributes);
61
        }
62
63
        return parent::getFormValue($converterAttributes, $value);
64
    }
65
66
    /**
67
     * @param mixed $value
68
     * @return mixed
69
     */
70
    public function getViewValue($value)
71
    {
72
        return empty($value) ? null : implode('; ', $value);
73
    }
74
75
    /**
76
     * @param array $config
77
     * @return array
78
     */
79
    public function getBusinessUnitList($config)
80
    {
81
        $aclClass = isset($config['aclClass']) ? $config['aclClass'] : null;
82
        $aclPermission = isset($config['aclPermission']) ? $config['aclPermission'] : null;
83
        $queryBuilder = $this->businessUnitRepository->createQueryBuilder('businessUnit');
84
85
        if ($aclClass && $aclPermission) {
86
            $businessUnitIds = $this
87
                ->businessUnitAclProvider
88
                ->getBusinessUnitIds($aclClass, $aclPermission);
89
90
            if (!is_array($businessUnitIds) || count($businessUnitIds) === 0) {
91
                $businessUnitIds = [0];
92
            }
93
94
            $this->applyAdditionalConditions(
95
                $queryBuilder,
96
                $businessUnitIds,
97
                $this->businessUnitAclProvider->getProcessedEntityAccessLevel()
98
            );
99
        }
100
101
        return $queryBuilder->getQuery()->getResult();
102
    }
103
104
    /**
105
     * @param QueryBuilder $queryBuilder
106
     * @param array $businessUnitIds
107
     * @param string $accessLevel
108
     */
109
    protected function applyAdditionalConditions(QueryBuilder $queryBuilder, $businessUnitIds, $accessLevel)
0 ignored issues
show
Unused Code introduced by
The parameter $accessLevel is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
110
    {
111
        $queryBuilder->andWhere($queryBuilder->expr()->in('businessUnit.id', $businessUnitIds));
112
    }
113
}
114