Files
piratepoet/lib/Segments/SegmentDependencyValidator.php
2021-04-12 11:11:25 +02:00

56 lines
1.6 KiB
PHP

<?php
namespace MailPoet\Segments;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Entities\SegmentEntity;
use MailPoet\WP\Functions as WPFunctions;
class SegmentDependencyValidator {
private const REQUIRED_PLUGINS_BY_TYPE = [
DynamicSegmentFilterData::TYPE_WOOCOMMERCE => [
'id' => 'woocommerce/woocommerce.php',
'name' => 'WooCommerce',
],
];
/** @var WPFunctions */
private $wp;
public function __construct(WPFunctions $wp) {
$this->wp = $wp;
}
/**
* @return string[]
*/
public function getMissingPluginsBySegment(SegmentEntity $segment): array {
$missingPlugins = [];
foreach ($segment->getDynamicFilters() as $dynamicFilter) {
$missingPlugin = $this->getMissingPluginByFilter($dynamicFilter);
if (!$missingPlugin) {
continue;
}
$missingPlugins[] = $missingPlugin['name'];
}
return $missingPlugins;
}
public function getMissingPluginByFilter(DynamicSegmentFilterEntity $dynamicSegmentFilter): ?array {
$requiredPlugin = $this->getRequiredPluginName($dynamicSegmentFilter);
if (isset($requiredPlugin['id']) && !$this->wp->isPluginActive($requiredPlugin['id'])) {
return $requiredPlugin;
}
return null;
}
private function getRequiredPluginName(DynamicSegmentFilterEntity $dynamicSegmentFilter): ?array {
if (isset(self::REQUIRED_PLUGINS_BY_TYPE[$dynamicSegmentFilter->getFilterData()->getFilterType()])) {
return self::REQUIRED_PLUGINS_BY_TYPE[$dynamicSegmentFilter->getFilterData()->getFilterType()];
}
return null;
}
}