1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/** |
4
|
|
|
* TechDivision\Import\Repositories\CacheWarmer\EavAttributeOptionValueCacheWarmer |
5
|
|
|
* |
6
|
|
|
* NOTICE OF LICENSE |
7
|
|
|
* |
8
|
|
|
* This source file is subject to the Open Software License (OSL 3.0) |
9
|
|
|
* that is available through the world-wide-web at this URL: |
10
|
|
|
* http://opensource.org/licenses/osl-3.0.php |
11
|
|
|
* |
12
|
|
|
* PHP version 5 |
13
|
|
|
* |
14
|
|
|
* @author Tim Wagner <[email protected]> |
15
|
|
|
* @copyright 2019 TechDivision GmbH <[email protected]> |
16
|
|
|
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) |
17
|
|
|
* @link https://github.com/techdivision/import |
18
|
|
|
* @link http://www.techdivision.com |
19
|
|
|
*/ |
20
|
|
|
|
21
|
|
|
namespace TechDivision\Import\Repositories\CacheWarmer; |
22
|
|
|
|
23
|
|
|
use TechDivision\Import\Utils\CacheKeys; |
24
|
|
|
use TechDivision\Import\Utils\MemberNames; |
25
|
|
|
use TechDivision\Import\Utils\SqlStatementKeys; |
26
|
|
|
use TechDivision\Import\Repositories\EavAttributeOptionValueRepositoryInterface; |
27
|
|
|
use TechDivision\Import\Repositories\EavEntityTypeRepositoryInterface; |
28
|
|
|
|
29
|
|
|
/** |
30
|
|
|
* Cache warmer implementation to pre-load EAV attribute option value data. |
31
|
|
|
* |
32
|
|
|
* @author Tim Wagner <[email protected]> |
33
|
|
|
* @copyright 2019 TechDivision GmbH <[email protected]> |
34
|
|
|
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) |
35
|
|
|
* @link https://github.com/techdivision/import |
36
|
|
|
* @link http://www.techdivision.com |
37
|
|
|
*/ |
38
|
|
|
class EavAttributeOptionValueCacheWarmer implements CacheWarmerInterface |
39
|
|
|
{ |
40
|
|
|
|
41
|
|
|
/** |
42
|
|
|
* The repository with the cache that has to be warmed. |
43
|
|
|
* |
44
|
|
|
* @var \TechDivision\Import\Repositories\EavAttributeOptionValueRepositoryInterface |
45
|
|
|
*/ |
46
|
|
|
protected $repository; |
47
|
|
|
|
48
|
|
|
/** |
49
|
|
|
* The EAV entity type repository instance. |
50
|
|
|
* |
51
|
|
|
* @var \TechDivision\Import\Repositories\EavEntityTypeRepositoryInterface |
52
|
|
|
*/ |
53
|
|
|
protected $eavEntityTypeRepository; |
54
|
|
|
|
55
|
|
|
/** |
56
|
|
|
* Initialize the cache warmer with the repository that has to be warmed. |
57
|
|
|
* |
58
|
|
|
* @param \TechDivision\Import\Repositories\EavAttributeOptionValueRepositoryInterface $repository The repository to warm |
59
|
|
|
* @param \TechDivision\Import\Repositories\EavEntityTypeRepositoryInterface $eavEntityTypeRepository The EAV entity type repository instance |
60
|
|
|
*/ |
61
|
|
|
public function __construct( |
62
|
|
|
EavAttributeOptionValueRepositoryInterface $repository, |
63
|
|
|
EavEntityTypeRepositoryInterface $eavEntityTypeRepository |
64
|
|
|
) { |
65
|
|
|
$this->repository = $repository; |
66
|
|
|
$this->eavEntityTypeRepository = $eavEntityTypeRepository; |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* Warms the cache for the passed repository. |
71
|
|
|
* |
72
|
|
|
* @return void |
73
|
|
|
*/ |
74
|
|
|
public function warm() |
75
|
|
|
{ |
76
|
|
|
|
77
|
|
|
// load the cache adapter |
78
|
|
|
/** @var \TechDivision\Import\Cache\CacheAdapterInterface $cacheAdapter */ |
79
|
|
|
$cacheAdapter = $this->repository->getCacheAdapter(); |
80
|
|
|
|
81
|
|
|
// load the available EAV attribute option values |
82
|
|
|
$eavAttributeOptionValues = $this->repository->findAll(); |
83
|
|
|
|
84
|
|
|
// load the available EAV entity types |
85
|
|
|
$eavEntityTypes = $this->eavEntityTypeRepository->findAll(); |
86
|
|
|
|
87
|
|
|
// prepare the caches for the statements |
88
|
|
|
foreach ($eavAttributeOptionValues as $eavAttributeOptionValue) { |
89
|
|
|
// (re-)sinitialize the array for the cache keys |
90
|
|
|
$cacheKeys = array(); |
91
|
|
|
|
92
|
|
|
// prepare the unique cache key for the EAV attribute option value |
93
|
|
|
$uniqueKey = array(CacheKeys::EAV_ATTRIBUTE_OPTION_VALUE => $eavAttributeOptionValue[$this->repository->getPrimaryKeyName()]); |
94
|
|
|
|
95
|
|
|
// prepare the cache key and add the option value to the cache |
96
|
|
|
$cacheKeys[$cacheAdapter->cacheKey( |
97
|
|
|
SqlStatementKeys::EAV_ATTRIBUTE_OPTION_VALUE_BY_OPTION_ID_AND_STORE_ID, |
98
|
|
|
array( |
|
|
|
|
99
|
|
|
MemberNames::STORE_ID => $eavAttributeOptionValue[MemberNames::STORE_ID], |
100
|
|
|
MemberNames::OPTION_ID => $eavAttributeOptionValue[MemberNames::OPTION_ID] |
101
|
|
|
) |
102
|
|
|
)] = $uniqueKey; |
103
|
|
|
|
104
|
|
|
// prepare the cache key and add the option value to the cache |
105
|
|
|
$cacheKeys[$cacheAdapter->cacheKey( |
106
|
|
|
SqlStatementKeys::EAV_ATTRIBUTE_OPTION_VALUE_BY_ATTRIBUTE_CODE_AND_STORE_ID_AND_VALUE, |
107
|
|
|
array( |
|
|
|
|
108
|
|
|
MemberNames::ATTRIBUTE_CODE => $eavAttributeOptionValue[MemberNames::ATTRIBUTE_CODE], |
109
|
|
|
MemberNames::STORE_ID => $eavAttributeOptionValue[MemberNames::STORE_ID], |
110
|
|
|
MemberNames::VALUE => $eavAttributeOptionValue[MemberNames::VALUE] |
111
|
|
|
) |
112
|
|
|
)] = $uniqueKey; |
113
|
|
|
|
114
|
|
|
// prepare the cache key and add the option value to the cache |
115
|
|
|
foreach ($eavEntityTypes as $eavEntityType) { |
116
|
|
|
// prepare the cache key and add the option value to the cache |
117
|
|
|
$cacheKeys[$cacheAdapter->cacheKey( |
118
|
|
|
SqlStatementKeys::EAV_ATTRIBUTE_OPTION_VALUE_BY_ENTITY_TYPE_ID_AND_ATTRIBUTE_CODE_AND_STORE_ID_AND_VALUE, |
119
|
|
|
array( |
|
|
|
|
120
|
|
|
MemberNames::ENTITY_TYPE_ID => $eavEntityType[MemberNames::ENTITY_TYPE_ID], |
121
|
|
|
MemberNames::ATTRIBUTE_CODE => $eavAttributeOptionValue[MemberNames::ATTRIBUTE_CODE], |
122
|
|
|
MemberNames::STORE_ID => $eavAttributeOptionValue[MemberNames::STORE_ID], |
123
|
|
|
MemberNames::VALUE => $eavAttributeOptionValue[MemberNames::VALUE] |
124
|
|
|
) |
125
|
|
|
)] = $uniqueKey; |
126
|
|
|
} |
127
|
|
|
|
128
|
|
|
// add the EAV attribute option value to the cache |
129
|
|
|
$cacheAdapter->toCache($uniqueKey, $eavAttributeOptionValue, $cacheKeys); |
|
|
|
|
130
|
|
|
} |
131
|
|
|
} |
132
|
|
|
} |
133
|
|
|
|
This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.
If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.
In this case you can add the
@ignore
PhpDoc annotation to the duplicate definition and it will be ignored.