forked from oroinc/platform
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathContextGridProvider.php
93 lines (80 loc) · 2.79 KB
/
ContextGridProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
namespace Oro\Bundle\ActivityBundle\Provider;
use Oro\Bundle\EntityBundle\Provider\EntityProvider;
use Oro\Bundle\EntityBundle\Tools\EntityRoutingHelper;
use Oro\Bundle\EntityConfigBundle\Provider\ConfigProvider;
use Oro\Bundle\EntityExtendBundle\Tools\ExtendHelper;
class ContextGridProvider
{
/** @var EntityRoutingHelper */
protected $routingHelper;
/** @var EntityProvider */
protected $entityProvider;
/** @var ConfigProvider */
protected $entityConfigProvider;
/**
* @param EntityRoutingHelper $routingHelper
* @param EntityProvider $entityProvider
* @param ConfigProvider $entityConfigProvider
*/
public function __construct(
EntityRoutingHelper $routingHelper,
EntityProvider $entityProvider,
ConfigProvider $entityConfigProvider
) {
$this->routingHelper = $routingHelper;
$this->entityProvider = $entityProvider;
$this->entityConfigProvider = $entityConfigProvider;
}
/**
* @param object $entity
*
* @return array
*/
public function getSupportedTargets($entity)
{
$targetEntities = $this->entityProvider->getEntities();
$entityTargets = [];
if (!is_object($entity) || !method_exists($entity, 'supportActivityTarget')) {
return $entityTargets;
}
$count = count($targetEntities);
for ($i = 0; $i < $count; $i++) {
$targetEntity = $targetEntities[$i];
$className = $targetEntity['name'];
$gridName = $this->getContextGridByEntity($className);
if ($gridName && !empty($className) && $entity->supportActivityTarget($className)) {
$entityTargets[] = [
'label' => $targetEntity['label'],
'className' => $this->routingHelper->getUrlSafeClassName($targetEntity['name']),
'first' => count($entityTargets) === 0,
'gridName' => $gridName
];
$i++;
}
}
return $entityTargets;
}
/**
* @param string $entityClass
*
* @return string|null
*/
public function getContextGridByEntity($entityClass)
{
if (!empty($entityClass)) {
$entityClass = $this->routingHelper->resolveEntityClass($entityClass);
if (ExtendHelper::isCustomEntity($entityClass)) {
return 'custom-entity-grid';
}
$config = $this->entityConfigProvider->getConfig($entityClass);
if ($config->has('context')) {
return $config->get('context');
}
if ($config->has('default')) {
return $config->get('default');
}
}
return null;
}
}