Skip to content

Commit 43a2d8a

Browse files
committed
psalm fixes
1 parent 57d18f2 commit 43a2d8a

24 files changed

+240
-129
lines changed

BitrixOrdinaryToolsBundle.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
* @since 19.05.2021
1313
*/
14-
class BitrixOrdinaryToolsBundle extends Bundle
14+
final class BitrixOrdinaryToolsBundle extends Bundle
1515
{
1616
/**
1717
* @inheritDoc

Services/Application/GetApplication.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class GetApplication
2020
*/
2121
public function instance() : CMain
2222
{
23+
/** @var CMain $APPLICATION */
2324
global $APPLICATION;
2425

2526
return $APPLICATION;

Services/Cache/LegacyCacher.php

Lines changed: 45 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,68 +12,86 @@
1212
*
1313
* @since 22.10.2020 Доработка.
1414
*/
15-
class LegacyCacher
15+
final class LegacyCacher
1616
{
1717
/**
1818
* @var CPHPCache $cacheHandler Обработчик кэша.
1919
*/
20-
protected $cacheHandler;
20+
private $cacheHandler;
2121

2222
/**
2323
* @var string ID кэша.
2424
*/
25-
protected $cacheId;
25+
private $cacheId;
2626

2727
/**
2828
* @var callable $callback Обработчик, он же получатель данных.
2929
*/
30-
protected $callback;
30+
private $callback;
3131

3232
/**
3333
* @var array $timeSeconds Параметры обработчика.
3434
*/
35-
protected $arCallbackParams;
35+
private $arCallbackParams;
3636

3737
/**
3838
* @var integer $timeSeconds Время жизни кэша.
3939
*/
40-
protected $timeSeconds;
40+
private $timeSeconds;
4141

4242
/**
4343
* @var string $currentUrl Текущий URL.
4444
*/
45-
protected $currentUrl;
45+
private $currentUrl;
4646

4747
/**
4848
* @var string $baseDir Базовая директория кэша (подпапка в bitrix/cache).
4949
*/
50-
protected $baseDir = '';
50+
private $baseDir = '';
5151

5252
/**
5353
* Cacher constructor.
5454
*
55-
* @param CPHPCache $cacheHandler Обработчик кэша.
56-
* @param string $cacheId Ключ кэша.
57-
* @param mixed $callback Callback функция.
58-
* @param array $arCallbackParams Параметры callback функции.
59-
* @param integer $timeSeconds Время кэширования.
60-
* @param string $currentUrl Текущий URL.
55+
* @param CPHPCache $cacheHandler Обработчик кэша.
56+
* @param string $cacheId Ключ кэша.
57+
* @param callable|null $callback Callback функция.
58+
* @param array $arCallbackParams Параметры callback функции.
59+
* @param integer $timeSeconds Время кэширования.
60+
* @param string $currentUrl Текущий URL.
6161
*/
6262
public function __construct(
6363
CPHPCache $cacheHandler,
6464
string $cacheId = '',
65-
$callback = null,
65+
?callable $callback = null,
6666
array $arCallbackParams = [],
6767
int $timeSeconds = 604800,
6868
string $currentUrl = ''
6969
) {
7070
$this->cacheHandler = $cacheHandler;
7171
$this->currentUrl = $currentUrl;
7272

73+
$callbackSalt = '';
74+
if ($callback !== null) {
75+
/** @var mixed $callbackResult */
76+
$callbackResult = $callback();
77+
if (is_array($callbackResult)) {
78+
$callbackResult = implode('', $callbackResult);
79+
}
80+
81+
if (is_object($callbackResult)) {
82+
$callbackResult = serialize($callbackResult);
83+
}
84+
85+
$callbackSalt = (string)$callbackResult;
86+
}
87+
7388
// ID кэша формируется из переданного и соли от callback и параметров.
74-
$this->cacheId = $cacheId . md5($callback) . $this->hashCache($arCallbackParams);
89+
$this->cacheId = $cacheId . md5($callbackSalt) . $this->hashCache($arCallbackParams);
90+
91+
if ($callback !== null) {
92+
$this->callback = $callback;
93+
}
7594

76-
$this->callback = $callback;
7795
$this->arCallbackParams = $arCallbackParams;
7896

7997
// Отрубить кэш для окружения dev.
@@ -83,18 +101,18 @@ public function __construct(
83101
/**
84102
* Фасад.
85103
*
86-
* @param string $cacheId Ключ кэша.
87-
* @param mixed $callback Callback функция.
88-
* @param array $arCallbackParams Параметры callback функции.
89-
* @param integer $timeSeconds Время кэширования.
90-
* @param string $currentUrl Текущий URL.
104+
* @param string $cacheId Ключ кэша.
105+
* @param callable|null $callback Callback функция.
106+
* @param array $arCallbackParams Параметры callback функции.
107+
* @param integer $timeSeconds Время кэширования.
108+
* @param string $currentUrl Текущий URL.
91109
*
92110
* @return mixed
93111
* @throws Exception
94112
*/
95113
public static function cacheFacade(
96114
string $cacheId,
97-
$callback,
115+
?callable $callback,
98116
array $arCallbackParams = [],
99117
int $timeSeconds = 86400,
100118
string $currentUrl = ''
@@ -123,11 +141,13 @@ public function returnResultCache()
123141
$cachePath = '/' . SITE_ID . '/' . $this->baseDir . $this->cacheId;
124142

125143
if ($this->cacheHandler->InitCache($this->timeSeconds, $this->cacheId, $cachePath)) {
144+
/** @var array $vars */
126145
$vars = $this->cacheHandler->GetVars();
127-
$arResult = $vars['result'];
146+
$arResult = (array)$vars['result'];
128147
} elseif ($this->cacheHandler->StartDataCache()) {
129148
$callback = $this->callback;
130149
try {
150+
/** @psalm-suppress MixedAssignment */
131151
$arResult = $callback(...$this->arCallbackParams);
132152
} catch (Exception $e) {
133153
$this->cacheHandler->AbortDataCache();
@@ -233,7 +253,7 @@ public function setCurrentUrl(string $currentUrl): LegacyCacher
233253
*
234254
* @return string
235255
*/
236-
protected function hashCache(array $arParams = []) : string
256+
private function hashCache(array $arParams = []) : string
237257
{
238258
return md5(serialize($arParams));
239259
}

Services/Facades/CacherFacade.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@
77
/**
88
* Class CacherFacade
99
* @package Prokl\BitrixOrdinaryToolsBundle\Services\Facades
10+
*
11+
* @method static cacheFacade(string $cacheId, ?callable $callback, array $arCallbackParams = [], int $timeSeconds = 86400,string $currentUrl = '')
12+
* @method static returnResultCache()
13+
* @method static setCacheId(string $cacheId): LegacyCacher
14+
* @method static setCallback(callable $callback): LegacyCacher
15+
* @method static setCallbackParams(): LegacyCacher
16+
* @method static setBaseDir(string $baseDir): LegacyCacher
17+
* @method static setTTL(int $timeSeconds): LegacyCacher
18+
* @method static setCurrentUrl(string $currentUrl): LegacyCacher
1019
*/
1120
class CacherFacade extends AbstractFacade
1221
{

Services/Facades/LastModifiedFacade.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
/**
88
* Class LastModified
99
* @package Prokl\BitrixOrdinaryToolsBundle\Services
10+
*
11+
* @method static add(string $hashCode, $value): void
12+
* @method static getData() : array
13+
* @method static getNewestModified()
1014
*/
1115
class LastModifiedFacade extends AbstractFacade
1216
{

Services/Facades/TimestampFacade.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
/**
88
* Class TimestampFacade
99
* @package Prokl\BitrixOrdinaryToolsBundle\Services\Facades
10+
*
11+
* @method static getNewestTimestamp() : string
12+
* @method static setTimestamps(array $arResultItems): self
1013
*/
1114
class TimestampFacade extends AbstractFacade
1215
{

Services/Iblock/HLIBlockElementManager.php

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Bitrix\Highloadblock\HighloadBlockTable;
66
use Bitrix\Main\ArgumentException;
77
use Bitrix\Main\ObjectPropertyException;
8+
use Bitrix\Main\ORM\Data\DataManager;
89
use Bitrix\Main\SystemException;
910
use Prokl\BitrixOrdinaryToolsBundle\Services\Facades\CacherFacade;
1011

@@ -16,16 +17,16 @@ class HLIBlockElementManager
1617
{
1718
/** Результат выборки из HL ИБ.
1819
*
19-
* @param string $sHLIblockCode Код HL блока.
20-
* @param array $arParams Параметры выборки.
20+
* @param string $hLIblockCode Код HL блока.
21+
* @param array $arParams Параметры выборки.
2122
*
2223
* @return mixed
2324
* @throws ArgumentException
2425
* @throws ObjectPropertyException
2526
* @throws SystemException
2627
*/
2728
public function getIBlockElements(
28-
string $sHLIblockCode,
29+
string $hLIblockCode,
2930
array $arParams = [
3031
'AR_ORDER',
3132
'AR_FILTER',
@@ -35,11 +36,10 @@ public function getIBlockElements(
3536
): array {
3637

3738
// Если не передали код HL блока, то прекращаем работу.
38-
if (!$sHLIblockCode) {
39+
if (!$hLIblockCode) {
3940
return [];
4041
}
4142

42-
/** @var $arDefValues $arDefValues Значения по-умолчанию. */
4343
$arDefValues = [
4444
'AR_ORDER' => ['ID' => 'ASC'],
4545
'AR_FILTER' => [],
@@ -48,9 +48,9 @@ public function getIBlockElements(
4848

4949
$arParams = array_merge($arDefValues, $arParams);
5050

51-
$sHlClassName = $this->getHLBlockClassByCode($sHLIblockCode);
51+
$dataManager = $this->getHLBlockClassByCode($hLIblockCode);
5252

53-
$obData = $sHlClassName::getList(
53+
$data = $dataManager::getList(
5454
[
5555
'select' => $arParams['AR_SELECT'],
5656
'order' => $arParams['AR_ORDER'],
@@ -60,8 +60,9 @@ public function getIBlockElements(
6060

6161
$arResult = [];
6262

63-
while ($arData = $obData->fetch()) {
64-
$idElement = $arData['ID'];
63+
/** @var array $arData */
64+
while ($arData = $data->fetch()) {
65+
$idElement = (int)$arData['ID'];
6566
$arResult[$idElement] = $arData;
6667
}
6768

@@ -72,51 +73,42 @@ public function getIBlockElements(
7273
/**
7374
* Кэшированный результат выборки из HL блока.
7475
*
75-
* @param string $sCodeHLblock Код HL блока.
76-
* @param array $arParams Параметры с типом и кодом инфоблока.
76+
* @param string $codeHLblock Код HL блока.
77+
* @param array $arParams Параметры с типом и кодом инфоблока.
7778
*
7879
* @return mixed
80+
* @psalm-suppress MixedMethodCall
7981
*/
8082
public function getIBlockElementsCached(
81-
string $sCodeHLblock,
83+
string $codeHLblock,
8284
array $arParams = ['AR_ORDER', 'AR_FILTER', 'AR_SELECT']
8385
) : array {
84-
return CacherFacade::setCacheId($sCodeHLblock.serialize(array_values($arParams)))
86+
return CacherFacade::setCacheId($codeHLblock.serialize(array_values($arParams)))
8587
->setCallback([$this, 'getIBlockElements'])
86-
->setCallbackParams($sCodeHLblock, $arParams)
88+
->setCallbackParams($codeHLblock, $arParams)
8789
->setTtl(604800)
8890
->returnResultCache();
8991
}
9092

9193
/**
9294
* Получить название класса HL блока по его коду
9395
*
94-
* @param string $sCodeHLblock Код HL блока.
96+
* @param string $codeHLblock Код HL блока.
9597
*
96-
* @return string|null
98+
* @return DataManager
9799
* @throws ArgumentException
98100
* @throws ObjectPropertyException
99101
* @throws SystemException
100102
*/
101103
private function getHLBlockClassByCode(
102-
string $sCodeHLblock
103-
): ?string {
104-
$obHlblock = HighloadBlockTable::getList(
104+
string $codeHLblock
105+
): DataManager {
106+
$hlblock = (string)HighloadBlockTable::getList(
105107
[
106-
'filter' => ['=NAME' => $sCodeHLblock],
108+
'filter' => ['=NAME' => $codeHLblock],
107109
]
108110
)->fetch();
109111

110-
if (!$obHlblock) {
111-
$arResult['TERMS_DESCRIPTION'] = [];
112-
}
113-
114-
try {
115-
$sHlClassName = (HighloadBlockTable::compileEntity($obHlblock))->getDataClass();
116-
} catch (SystemException $e) {
117-
return false;
118-
}
119-
120-
return $sHlClassName;
112+
return (HighloadBlockTable::compileEntity($hlblock))->getDataClass();
121113
}
122114
}

0 commit comments

Comments
 (0)