<?php
namespace Abcpremium\DataObjectQualityBundle\Event\Subscriber;
use Abcpremium\DataObjectQualityBundle\Configuration\BundleConfiguration;
use Pimcore\Event\Admin\IndexActionSettingsEvent;
use Pimcore\Event\AdminEvents;
use Pimcore\Model\DataObject\DataQualityConfig\Listing;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class AddClassIdsToSettings implements EventSubscriberInterface
{
private BundleConfiguration $bundleConfiguration;
public function __construct(
BundleConfiguration $bundleConfiguration
)
{
$this->bundleConfiguration = $bundleConfiguration;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
AdminEvents::INDEX_ACTION_SETTINGS => 'addClassIds',
];
}
public function addClassIds(IndexActionSettingsEvent $event): void
{
$event->addSetting('abcpremiumDataObjectQuality', $this->getSettings());
}
private function getSettings(): array
{
$classIds = $this->getClassIdsWithQualityConfigs();
return [
'classIds' => $classIds,
'properties' => $this->getPropertyNamesForClassIds($classIds),
'thresholds' => $this->getResultThresholdsForClassIds($classIds)
];
}
private function getClassIdsWithQualityConfigs(): array
{
$classIds = [];
$configListing = new Listing();
foreach ($configListing as $qualityConfig) {
$classIds[] = $qualityConfig->getDataObjectClassId();
}
return array_unique($classIds);
}
private function getPropertyNamesForClassIds(array $classIds): array
{
$properties = [];
foreach ($classIds as $classId) {
$properties[$classId] = $this->bundleConfiguration->getPropertyNameForDataQuality($classId);
}
return $properties;
}
private function getResultThresholdsForClassIds(array $classIds): array
{
$thresholds = [];
foreach ($classIds as $classId) {
$thresholds[$classId] = $this->bundleConfiguration->getResultThresholdsByClassId($classId);
}
return $thresholds;
}
}