<?php/** * Pimcore * * This source file is available under following license: * - Pimcore Commercial License (PCL) * * @copyright Copyright (c) Pimcore GmbH (http://www.pimcore.org) * @license http://www.pimcore.org/license PCL */namespace Pimcore\Bundle\DataHubFileExportBundle\EventSubscriber;use Pimcore\Bundle\DataHubFileExportBundle\Event\Admin\ResetConfigEvent;use Pimcore\Bundle\DataHubFileExportBundle\Event\Admin\ValidateConfigEvent;use Pimcore\Bundle\DataHubFileExportBundle\Helper;use Symfony\Component\EventDispatcher\EventSubscriberInterface;class AdminSubscriber implements EventSubscriberInterface{ /** * @return string[] */ public static function getSubscribedEvents() { return [ ValidateConfigEvent::class => 'isValidConfig', ResetConfigEvent::class => 'resetConfig', ]; } public function resetConfig(ResetConfigEvent $e) { $config = $e->getConfig(); $exporter = Helper::getExporterService($config); $exporter->resetData(); } /** * @param array $config * * @return array */ protected function getConfigErrors($config) { $errors = []; if ($config['general']['active']) { if (!$config['schema']['classId']) { $errors[] = 'Please define a Data Class in the Schema definition'; } if (!$config['schema']['config']) { $errors[] = 'Please define a schema for the export'; } if ($deliveryDestination = ($config['deliveryDestination'] ?? null)) { if (!$config['deliveryDestination']['filename']) { $errors[] = 'Please define a filename in Delivery destination'; } if ($deliveryDestination['transmitter'] == 'localDirectory') { if (!$deliveryDestination['transmitter_localDirectory']['directory']) { $errors[] = 'Please provide a "Directory" in "Delivery destination"'; } } if ($deliveryDestination['transmitter'] == 'sftp') { $settings = $deliveryDestination['transmitter_sftp']; foreach (['host', 'port', 'username'] as $key) { if (!$settings[$key]) { $errors[] = 'Please provide "'.$key.'" in the SFTP settings'; } } } if ($deliveryDestination['transmitter'] == 'http') { $settings = $deliveryDestination['transmitter_http']; foreach (['method', 'url'] as $key) { if (!$settings[$key]) { $errors[] = 'Please provide "'.$key.'" in the HTTP settings'; } } } } } return $errors; } /** * @param ValidateConfigEvent $e * * @return array * * @throws \Exception */ public function isValidConfig(ValidateConfigEvent $e) { $config = $e->getConfigData(); $errors = $this->getConfigErrors($config); if ($errors) { throw new \Exception(implode("\n", $errors)); } return $errors; }}