portal.mkgtu.ru/common/components/dictionaryManager/GetReferencesManager/GetReferencesManager.php

123 lines
3.0 KiB
PHP
Raw Permalink Normal View History

2024-03-28 09:51:45 +03:00
<?php
namespace common\components\dictionaryManager\GetReferencesManager;
use common\components\soapResponse\responses\GetReferencesResponse;
use stdClass;
use Throwable;
class GetReferencesManager
{
protected const DEFAULT_FILTER = [
'Operator' => 'And',
];
public const FILTER_TYPE_BOL = "BeginningOfLine";
public const FILTER_TYPE_AP = "AnyPosition";
public static function getReferences(string $dictionary, string $filterText = "", string $filterType = self::FILTER_TYPE_AP, array $filters = []): GetReferencesResponse
{
$filters = array_merge(self::DEFAULT_FILTER, $filters);
return static::makeReferencesRequest(
$dictionary,
$filterType,
$filterText,
$filters,
);
}
public static function GetPageSize(): int
{
$page_size = getenv('GET_REFERENCE_PAGE_SIZE');
if ($page_size !== false && is_numeric($page_size)) {
return (int)$page_size;
}
return 1000;
}
public static function IsPaginationEnabled(): bool
{
try {
$result = \Yii::$app->dictionaryManager->GetInterfaceVersion('GetReferences');
return version_compare($result, '0.0.18.3') >= 0;
} catch (Throwable $e) {
\Yii::error("Не удалось получить версию метода GetReferences: {$e->getMessage()}");
return false;
}
}
protected static function makeReferencesRequest(string $class_name, string $filterType, string $filterText, array $filters): GetReferencesResponse
{
return new GetReferencesResponse($class_name, $filterType, $filterText, $filters);
}
public static function addPaginationFilters(array $base_filters, string $class_name, int $pageSize, ?stdClass $lastReference)
{
if (!static::IsPaginationEnabled()) {
return $base_filters;
}
$pagination_filters = [
[
'Field' => 'AutoOrder',
'Comparison' => 'Equal',
'Values' => [
'ValueType' => 'Булево',
'Value' => false
],
],
[
'Field' => 'Limit',
'Comparison' => 'Equal',
'Values' => [
'ValueType' => 'Число',
'Value' => $pageSize
],
],
];
if ($lastReference) {
$pagination_filters[] = [
'Field' => 'Ссылка',
'Comparison' => 'Greater',
'Values' => [
'ValueType' => $class_name,
'ValueRef' => $lastReference,
],
];
}
return array_merge_recursive(
$base_filters,
[
'SimpleFilters' => $pagination_filters
]
);
}
}