From f4fcbbcdc68ede6543a6b222870f120137e6f3ec Mon Sep 17 00:00:00 2001 From: Dominik Pfaffenbauer Date: Fri, 24 Jan 2025 08:30:58 +0100 Subject: [PATCH] Remove ProcessManager integration --- composer.json | 1 - phpstan.neon | 1 - .../DataDefinitionsExtension.php | 8 - .../ExportDefinitionObjectStartupForm.php | 48 ---- .../ProcessManager/ImportDefinitionsType.php | 31 --- .../AbstractProcessManagerListener.php | 191 ---------------- .../ArtifactGenerationProviderInterface.php | 27 --- .../ProcessManager/ArtifactProviderTrait.php | 59 ----- .../DataDefinitionProcessTrait.php | 48 ---- .../ExportDefinitionProcess.php | 29 --- .../ExportDefinitionStartupFormResolver.php | 53 ----- .../ImportDefinitionProcess.php | 29 --- .../ImportDefinitionsReport.php | 210 ------------------ .../ProcessManagerExportListener.php | 69 ------ .../ProcessManagerImportListener.php | 23 -- .../Provider/CsvProvider.php | 24 +- .../Provider/ExcelProvider.php | 11 +- .../Provider/JsonProvider.php | 14 +- .../Provider/XmlProvider.php | 11 +- .../Resources/config/process_manager.yml | 48 ---- .../public/pimcore/css/datadefinition.css | 4 +- .../js/process_manager/export_contextmenu.js | 89 -------- .../js/process_manager/export_definitions.js | 43 ---- .../js/process_manager/export_search.js | 107 --------- .../js/process_manager/import_definitions.js | 93 -------- .../Resources/translations/admin.en.yml | 4 - 26 files changed, 6 insertions(+), 1269 deletions(-) delete mode 100644 src/DataDefinitionsBundle/Form/Type/ProcessManager/ExportDefinitionObjectStartupForm.php delete mode 100644 src/DataDefinitionsBundle/Form/Type/ProcessManager/ImportDefinitionsType.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/AbstractProcessManagerListener.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ArtifactGenerationProviderInterface.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ArtifactProviderTrait.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/DataDefinitionProcessTrait.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ExportDefinitionProcess.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ExportDefinitionStartupFormResolver.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ImportDefinitionProcess.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ImportDefinitionsReport.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ProcessManagerExportListener.php delete mode 100644 src/DataDefinitionsBundle/ProcessManager/ProcessManagerImportListener.php delete mode 100644 src/DataDefinitionsBundle/Resources/config/process_manager.yml delete mode 100644 src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_contextmenu.js delete mode 100644 src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_definitions.js delete mode 100644 src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_search.js delete mode 100644 src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/import_definitions.js diff --git a/composer.json b/composer.json index ea195ee8..859ca395 100755 --- a/composer.json +++ b/composer.json @@ -59,7 +59,6 @@ "guzzlehttp/psr7": "< 2.0" }, "suggest": { - "dpfaffenbauer/process-manager": "Allows to start Imports/Exports from within Pimcore UI and also tracks Status of current processes.", "guzzlehttp/psr7": "For downloading external data like Images" }, "autoload": { diff --git a/phpstan.neon b/phpstan.neon index a26af1e0..dd63de65 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,7 +9,6 @@ parameters: - '**/DependencyInjection/Configuration.php' - '**/Migrations/Version*.php' # Ignore cause the file uses external dependencies and will only be used if those dependencies are met - - '**/ProcessManager/*.php' - '**/CoreShop/*.php' - '**/Dao.php' diff --git a/src/DataDefinitionsBundle/DependencyInjection/DataDefinitionsExtension.php b/src/DataDefinitionsBundle/DependencyInjection/DataDefinitionsExtension.php index 87f79b72..b8a14040 100644 --- a/src/DataDefinitionsBundle/DependencyInjection/DataDefinitionsExtension.php +++ b/src/DataDefinitionsBundle/DependencyInjection/DataDefinitionsExtension.php @@ -77,14 +77,6 @@ public function load(array $configs, ContainerBuilder $container) $loader->load('guzzle_psr7.yml'); } - if (array_key_exists('ProcessManagerBundle', $bundles)) { - $config['pimcore_admin']['js']['process_manager_import'] = '/bundles/datadefinitions/pimcore/js/process_manager/import_definitions.js'; - $config['pimcore_admin']['js']['process_manager_export'] = '/bundles/datadefinitions/pimcore/js/process_manager/export_definitions.js'; - $config['pimcore_admin']['js']['process_manager_export_contextmenu'] = '/bundles/datadefinitions/pimcore/js/process_manager/export_contextmenu.js'; - $config['pimcore_admin']['js']['process_manager_export_search'] = '/bundles/datadefinitions/pimcore/js/process_manager/export_search.js'; - $loader->load('process_manager.yml'); - } - $this->registerDependantBundles('coreshop', [PimcoreSimpleBackendSearchBundle::class], $container); $this->registerPimcoreResources('data_definitions', $config['pimcore_admin'], $container); diff --git a/src/DataDefinitionsBundle/Form/Type/ProcessManager/ExportDefinitionObjectStartupForm.php b/src/DataDefinitionsBundle/Form/Type/ProcessManager/ExportDefinitionObjectStartupForm.php deleted file mode 100644 index 83821858..00000000 --- a/src/DataDefinitionsBundle/Form/Type/ProcessManager/ExportDefinitionObjectStartupForm.php +++ /dev/null @@ -1,48 +0,0 @@ -add('root', TextType::class, [ - 'required' => false, - ]) - ->add('query', TextType::class, [ - 'required' => false, - ]) - ->add('only_direct_children', CheckboxType::class, [ - 'required' => false, - ]) - ->add('condition', TextType::class, [ - 'required' => false, - ]) - ->add('ids', CollectionType::class, [ - 'allow_add' => true, - 'entry_type' => TextType::class, - 'required' => false, - ]) - ; - } -} diff --git a/src/DataDefinitionsBundle/Form/Type/ProcessManager/ImportDefinitionsType.php b/src/DataDefinitionsBundle/Form/Type/ProcessManager/ImportDefinitionsType.php deleted file mode 100644 index b8b873bd..00000000 --- a/src/DataDefinitionsBundle/Form/Type/ProcessManager/ImportDefinitionsType.php +++ /dev/null @@ -1,31 +0,0 @@ -add('definition', TextType::class) - ->add('params', TextType::class) - ; - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/AbstractProcessManagerListener.php b/src/DataDefinitionsBundle/ProcessManager/AbstractProcessManagerListener.php deleted file mode 100644 index fcc4015d..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/AbstractProcessManagerListener.php +++ /dev/null @@ -1,191 +0,0 @@ -processFactory = $processFactory; - $this->processLogger = $processLogger; - $this->repository = $repository; - $this->eventDispatcher = $eventDispatcher; - } - - /** - * @return ProcessInterface|null - */ - public function getProcess(): ProcessInterface - { - return $this->process; - } - - public function onTotalEvent(DefinitionEventInterface $event): void - { - if (null === $this->process) { - $date = Carbon::now(); - - $this->process = $this->processFactory->createProcess( - sprintf( - static::PROCESS_NAME . ' (%s): %s', - $date->formatLocalized('%A %d %B %Y'), - $event->getDefinition()->getName(), - ), - static::PROCESS_TYPE, - 'Loading', - $event->getSubject(), - 0, - -1, - 0, - 1, - ProcessManagerBundle::STATUS_RUNNING, - ); - $this->process->save(); - - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_TOTAL . $event->getSubject()); - } - } - - public function onProgressEvent(DefinitionEventInterface $event): void - { - if ($this->process) { - $now = new \DateTimeImmutable(); - ++$this->lastProgressStepsCount; - if ($this->lastProgressAt instanceof \DateTimeInterface) { - $diff = $now->getTimestamp() - $this->lastProgressAt->getTimestamp(); - - if (self::PROCESS_PROGRESS_THROTTLE_SECONDS > $diff) { - return; - } - } - $this->lastProgressAt = $now; - - if ($this->process->getStoppable()) { - $this->process = $this->repository->find($this->process->getId()); - } - - if ($this->process->getStatus() === ProcessManagerBundle::STATUS_STOPPING) { - $this->eventDispatcher->dispatch('data_definitions.stop'); - $this->process->setStatus(ProcessManagerBundle::STATUS_STOPPED); - } - - $this->process->progress($this->lastProgressStepsCount); - $this->process->save(); - - $this->lastProgressStepsCount = 0; - - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_PROGRESS); - } - } - - public function onStatusEvent(DefinitionEventInterface $event): void - { - if ($this->process) { - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_STATUS . $event->getSubject()); - - $now = new \DateTimeImmutable(); - if ($this->lastStatusAt instanceof \DateTimeInterface) { - $diff = $now->getTimestamp() - $this->lastStatusAt->getTimestamp(); - - if (self::PROCESS_PROGRESS_THROTTLE_SECONDS > $diff) { - return; - } - } - $this->lastStatusAt = $now; - - if ($this->process->getStoppable()) { - $this->process = $this->repository->find($this->process->getId()); - } - $this->process->setMessage($event->getSubject()); - $this->process->save(); - } - } - - public function onFinishedEvent(DefinitionEventInterface $event): void - { - if ($this->process) { - if ($this->process->getStatus() === ProcessManagerBundle::STATUS_RUNNING) { - $this->process->setProgress($this->process->getTotal()); - $this->process->setMessage($event->getSubject()); - $this->process->setStatus(ProcessManagerBundle::STATUS_COMPLETED); - $this->process->setCompleted(time()); - $this->process->save(); - } - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_FINISHED . $event->getSubject()); - } - } - - public function onFailureEvent(DefinitionEventInterface $event): void - { - if ($this->process) { - if ($event->getDefinition()->getStopOnException()) { - $this->process->setStatus(ProcessManagerBundle::STATUS_FAILED); - } else { - $this->process->setStatus(ProcessManagerBundle::STATUS_COMPLETED_WITH_EXCEPTIONS); - } - $this->process->setCompleted(time()); - $this->process->save(); - - if (is_string($event->getSubject())) { - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_STATUS_ERROR . $event->getSubject()); - } - } - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ArtifactGenerationProviderInterface.php b/src/DataDefinitionsBundle/ProcessManager/ArtifactGenerationProviderInterface.php deleted file mode 100644 index d1ab3f8e..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ArtifactGenerationProviderInterface.php +++ /dev/null @@ -1,27 +0,0 @@ -provideArtifactStream($configuration, $definition, $params); - - $artifact = new Asset\Document(); - $artifact->setFilename($artifactName); - $artifact->setStream($stream); - $artifact->setParent($artifactPath); - $artifact->setFilename(Asset\Service::getUniqueKey($artifact)); - $artifact->save(); - - if (is_resource($stream)) { - fclose($stream); - } - - return $artifact; - } - - abstract public function provideArtifactStream( - array $configuration, - ExportDefinitionInterface $definition, - array $params, - ); -} diff --git a/src/DataDefinitionsBundle/ProcessManager/DataDefinitionProcessTrait.php b/src/DataDefinitionsBundle/ProcessManager/DataDefinitionProcessTrait.php deleted file mode 100644 index 61fa0bc9..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/DataDefinitionProcessTrait.php +++ /dev/null @@ -1,48 +0,0 @@ -getSettings(); - if (isset($settings['params'])) { - $params = array_replace(json_decode($settings['params'], true), $params); - } - - $currentUser = Admin::getCurrentUser(); - - if ($currentUser && !isset($params['userId'])) { - $params['userId'] = $currentUser->getId(); - } - - $settings['command'] = [ - $type, - '-d', - $settings['definition'], - '-p', - json_encode($params), - ]; - - $executable->setSettings($settings); - - return parent::run($executable, $params); - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionProcess.php b/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionProcess.php deleted file mode 100644 index 6ecd3ba6..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionProcess.php +++ /dev/null @@ -1,29 +0,0 @@ -runDefinition('data-definitions:export', $executable, $params); - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionStartupFormResolver.php b/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionStartupFormResolver.php deleted file mode 100644 index 89661184..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ExportDefinitionStartupFormResolver.php +++ /dev/null @@ -1,53 +0,0 @@ -getType() !== 'exportdefinition') { - return false; - } - - $definition = $this->definitionRepository->find($executable->getSettings()['definition']); - - if (!$definition instanceof ExportDefinitionInterface) { - return false; - } - - if ($definition->getFetcher() !== 'objects') { - return false; - } - - return true; - } - - public function resolveFormType(ExecutableInterface $executable): ?string - { - return ExportDefinitionObjectStartupForm::class; - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionProcess.php b/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionProcess.php deleted file mode 100644 index 0747784d..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionProcess.php +++ /dev/null @@ -1,29 +0,0 @@ -runDefinition('data-definitions:import', $executable, $params); - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionsReport.php b/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionsReport.php deleted file mode 100644 index 92504c6c..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ImportDefinitionsReport.php +++ /dev/null @@ -1,210 +0,0 @@ - self::EVENT_STATUS_IMPORT_NEW, - 'attr' => 'new', - ], - [ - 'text' => self::EVENT_STATUS_IMPORT_EXISTING, - 'attr' => 'existing', - ], - [ - 'text' => self::EVENT_STATUS_IGNORE_NEW, - 'attr' => 'ignore_new', - ], - [ - 'text' => self::EVENT_STATUS_IGNORE_EXISTING, - 'attr' => 'ignore_existing', - ], - [ - 'text' => self::EVENT_STATUS_IGNORE_FILTERED, - 'attr' => 'ignore_filtered', - ], - ]; - - public function generateReport(ProcessInterface $process, string $log): string - { - $result = $this->doReport($log); - - $importedNew = 0; - $importedExisting = 0; - $skippedNew = 0; - $skippedExisting = 0; - $skippedFiltered = 0; - $errorsCnt = 0; - $errors = []; - $total = $result['total']; - $cnt = $result['currentObject']; - - for ($iter = 0; $iter <= $cnt; ++$iter) { - if (isset($result['productStatus'][$iter])) { - $status = $result['productStatus'][$iter]; - - if (isset($status['error'])) { - $errors[] = 'Line ' . ($iter + 1) . '. Error: ' . $status['error']; - ++$errorsCnt; - } elseif (isset($status['ignore_filtered'])) { - ++$skippedFiltered; - } elseif (isset($status['ignore_new'])) { - ++$skippedNew; - } elseif (isset($status['ignore_existing'])) { - ++$skippedExisting; - } elseif (isset($status['new'])) { - ++$importedNew; - } elseif (isset($status['existing'])) { - ++$importedExisting; - } - } - } - - $items = []; - $items[] = 'Total lines processed: ' . $total; - if ($importedNew) { - $items[] = 'Imported new objects: ' . $importedNew; - } - - if ($importedExisting) { - $items[] = 'Updates: ' . $importedExisting; - } - - if ($skippedNew) { - $items[] = 'Skipped new: ' . $skippedNew; - } - if ($skippedExisting) { - $items[] = 'Skipped existing: ' . $skippedExisting; - } - if ($skippedFiltered) { - $items[] = 'Filtered: ' . $skippedFiltered; - } - $items[] = 'Errors count: ' . $errorsCnt; - - if (count($errors)) { - $items[] = 'Errors: '; - $items = array_merge($items, $errors); - } - - return implode('
', $items); - } - - protected function doReport($log) - { - $lines = explode(\PHP_EOL, $log); - $result = [ - 'currentObject' => 0, - 'productStatus' => [], - ]; - - foreach ($lines as $line) { - $this->processLine($line, $result); - } - - return $result; - } - - protected function processLine($line, &$result) - { - if ($this->checkForProgress($line, $result)) { - return; - } - - if ($this->checkForTotal($line, $result)) { - return; - } - - if ($this->checkForError($line, $result)) { - return; - } - - $this->processChecks($line, $result); - } - - protected function checkForProgress($line, &$result): bool - { - if (str_contains($line, self::EVENT_PROGRESS)) { - $result['currentObject'] = $result['currentObject'] + 1; - - return true; - } - - return false; - } - - protected function checkForTotal($line, &$result): bool - { - $pos = strpos($line, self::EVENT_TOTAL); - if ($pos) { - $total = substr($line, $pos + strlen(self::EVENT_TOTAL)); - $result['total'] = (int) $total; - - return true; - } - - return false; - } - - protected function checkForError($line, &$result): bool - { - $pos = strpos($line, self::EVENT_STATUS_ERROR); - if (false !== $pos) { - $result['productStatus'][$result['currentObject']]['error'] = substr( - $line, - $pos + strlen(self::EVENT_STATUS_ERROR), - ); - - return true; - } - - return false; - } - - protected function processChecks($line, &$result): void - { - foreach (self::CHECKS as $check) { - $pos = strpos($line, $check['text']); - if (false !== $pos) { - $result['productStatus'][$result['currentObject']][$check['attr']] = true; - } - } - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ProcessManagerExportListener.php b/src/DataDefinitionsBundle/ProcessManager/ProcessManagerExportListener.php deleted file mode 100644 index 48b8bb01..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ProcessManagerExportListener.php +++ /dev/null @@ -1,69 +0,0 @@ -providerRegistry = $providerRegistry; - } - - public function onFinishedEvent(DefinitionEventInterface $event): void - { - if (null !== $this->process) { - if ($this->process->getStatus() == ProcessManagerBundle::STATUS_RUNNING) { - $this->process->setProgress($this->process->getTotal()); - $this->process->setMessage($event->getSubject()); - $this->process->setStatus(ProcessManagerBundle::STATUS_COMPLETED); - $this->process->setCompleted(time()); - $this->process->save(); - } - $definition = $event->getDefinition(); - - $this->processLogger->info($this->process, ImportDefinitionsReport::EVENT_FINISHED . $event->getSubject()); - - $provider = $this->providerRegistry->get($definition->getProvider()); - - if ($provider instanceof ArtifactGenerationProviderInterface) { - if (method_exists($this->process, 'setArtifact')) { - $artifact = $provider->generateArtifact( - $definition->getConfiguration(), - $definition, - $event->getParams(), - ); - - if (null === $artifact) { - return; - } - - $this->process->setArtifact($artifact); - $this->process->save(); - } - } - } - } -} diff --git a/src/DataDefinitionsBundle/ProcessManager/ProcessManagerImportListener.php b/src/DataDefinitionsBundle/ProcessManager/ProcessManagerImportListener.php deleted file mode 100644 index 8ec0438f..00000000 --- a/src/DataDefinitionsBundle/ProcessManager/ProcessManagerImportListener.php +++ /dev/null @@ -1,23 +0,0 @@ -exportData[] = $data; } - - public function provideArtifactStream(array $configuration, ExportDefinitionInterface $definition, array $params) - { - $headers = count($this->exportData) > 0 ? array_keys($this->exportData[0]) : []; - - $stream = fopen('php://memory', 'rw+'); - - $writer = Writer::createFromStream($stream); - $writer->setDelimiter($configuration['delimiter']); - $writer->setEnclosure($configuration['enclosure']); - if (isset($configuration['escape'])) { - $writer->setEscape($configuration['escape']); - } - $writer->insertOne($headers); - $writer->insertAll($this->exportData); - - return $stream; - } } diff --git a/src/DataDefinitionsBundle/Provider/ExcelProvider.php b/src/DataDefinitionsBundle/Provider/ExcelProvider.php index 85d2c3c6..b20a32fa 100644 --- a/src/DataDefinitionsBundle/Provider/ExcelProvider.php +++ b/src/DataDefinitionsBundle/Provider/ExcelProvider.php @@ -19,8 +19,6 @@ use Instride\Bundle\DataDefinitionsBundle\Model\ExportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportMapping\FromColumn; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactGenerationProviderInterface; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactProviderTrait; use OpenSpout\Common\Entity\Row; use OpenSpout\Reader\ReaderInterface; use OpenSpout\Reader\XLSX\Reader; @@ -29,10 +27,8 @@ use Pimcore\Model\Asset; use Pimcore\Tool\Storage; -class ExcelProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface, ArtifactGenerationProviderInterface +class ExcelProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface { - use ArtifactProviderTrait; - private string $exportPath; private WriterInterface $writer; @@ -141,11 +137,6 @@ public function exportData(array $configuration, ExportDefinitionInterface $defi unlink($this->getExportPath()); } - public function provideArtifactStream($configuration, ExportDefinitionInterface $definition, $params) - { - return fopen($this->getExportPath(), 'rb'); - } - private function createReader($path): ReaderInterface { $reader = $this->getXlsxReader(); diff --git a/src/DataDefinitionsBundle/Provider/JsonProvider.php b/src/DataDefinitionsBundle/Provider/JsonProvider.php index 451640d7..88dcd36a 100644 --- a/src/DataDefinitionsBundle/Provider/JsonProvider.php +++ b/src/DataDefinitionsBundle/Provider/JsonProvider.php @@ -20,15 +20,11 @@ use Instride\Bundle\DataDefinitionsBundle\Model\ExportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportMapping\FromColumn; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactGenerationProviderInterface; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactProviderTrait; use RecursiveArrayIterator; use RecursiveIteratorIterator; -class JsonProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface, ArtifactGenerationProviderInterface +class JsonProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface { - use ArtifactProviderTrait; - /** * @var array */ @@ -115,12 +111,4 @@ public function addExportData( ): void { $this->exportData[] = $data; } - - public function provideArtifactStream($configuration, ExportDefinitionInterface $definition, array $params) - { - $stream = fopen('php://memory', 'rw+'); - fwrite($stream, json_encode($this->exportData)); - - return $stream; - } } diff --git a/src/DataDefinitionsBundle/Provider/XmlProvider.php b/src/DataDefinitionsBundle/Provider/XmlProvider.php index 3a46b5a2..b5813e3d 100755 --- a/src/DataDefinitionsBundle/Provider/XmlProvider.php +++ b/src/DataDefinitionsBundle/Provider/XmlProvider.php @@ -20,8 +20,6 @@ use Instride\Bundle\DataDefinitionsBundle\Model\ExportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportDefinitionInterface; use Instride\Bundle\DataDefinitionsBundle\Model\ImportMapping\FromColumn; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactGenerationProviderInterface; -use Instride\Bundle\DataDefinitionsBundle\ProcessManager\ArtifactProviderTrait; use Pimcore\File; use Pimcore\Model\Asset; use Pimcore\Tool\Storage; @@ -29,10 +27,8 @@ use Symfony\Component\Process\Process; use XMLWriter; -class XmlProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface, ArtifactGenerationProviderInterface +class XmlProvider extends AbstractFileProvider implements ImportProviderInterface, ExportProviderInterface { - use ArtifactProviderTrait; - private XMLWriter $writer; private string $exportPath; @@ -172,11 +168,6 @@ public function exportData(array $configuration, ExportDefinitionInterface $defi unlink($this->getExportPath()); } - public function provideArtifactStream($configuration, ExportDefinitionInterface $definition, $params) - { - return fopen($this->getExportPath(), 'rb'); - } - private function getXMLWriter(): XMLWriter { if (!isset($this->writer)) { diff --git a/src/DataDefinitionsBundle/Resources/config/process_manager.yml b/src/DataDefinitionsBundle/Resources/config/process_manager.yml deleted file mode 100644 index 17a7c953..00000000 --- a/src/DataDefinitionsBundle/Resources/config/process_manager.yml +++ /dev/null @@ -1,48 +0,0 @@ -services: - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ProcessManagerImportListener: - arguments: - - '@process_manager.factory.process' - - '@ProcessManagerBundle\Logger\ProcessLogger' - - '@process_manager.repository.process' - - '@event_dispatcher' - tags: - - { name: 'kernel.event_listener', event: 'data_definitions.import.total', method: 'onTotalEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.import.progress', method: 'onProgressEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.import.status', method: 'onStatusEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.import.finished', method: 'onFinishedEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.import.failure', method: 'onFailureEvent' } - - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ProcessManagerExportListener: - arguments: - - '@process_manager.factory.process' - - '@ProcessManagerBundle\Logger\ProcessLogger' - - '@process_manager.repository.process' - - '@event_dispatcher' - calls: - - method: setProviderRegistry - arguments: - - '@data_definitions.registry.export_provider' - tags: - - { name: 'kernel.event_listener', event: 'data_definitions.export.total', method: 'onTotalEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.export.progress', method: 'onProgressEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.export.status', method: 'onStatusEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.export.finished', method: 'onFinishedEvent' } - - { name: 'kernel.event_listener', event: 'data_definitions.export.failure', method: 'onFailureEvent' } - - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ImportDefinitionProcess: - tags: - - { name: 'process_manager.process', type: 'importdefinition', form-type: Instride\Bundle\DataDefinitionsBundle\Form\Type\ProcessManager\ImportDefinitionsType } - - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ExportDefinitionProcess: - tags: - - { name: 'process_manager.process', type: 'exportdefinition', form-type: Instride\Bundle\DataDefinitionsBundle\Form\Type\ProcessManager\ImportDefinitionsType } - - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ExportDefinitionStartupFormResolver: - arguments: - - '@data_definitions.repository.export_definition' - tags: - - { name: 'process_manager.startup_form_resolver', type: 'exportdefinition' } - - Instride\Bundle\DataDefinitionsBundle\ProcessManager\ImportDefinitionsReport: - tags: - - { name: process_manager.process_report, type: import_definitions } diff --git a/src/DataDefinitionsBundle/Resources/public/pimcore/css/datadefinition.css b/src/DataDefinitionsBundle/Resources/public/pimcore/css/datadefinition.css index da4ec80e..15fa056b 100644 --- a/src/DataDefinitionsBundle/Resources/public/pimcore/css/datadefinition.css +++ b/src/DataDefinitionsBundle/Resources/public/pimcore/css/datadefinition.css @@ -1,4 +1,4 @@ -.data_definitions_icon_import_definition, .processmanager_icon_executable_type_importdefinition { +.data_definitions_icon_import_definition { background: url(../img/import_definition.svg) center center no-repeat !important; } @@ -10,7 +10,7 @@ body.pimcore_version_11 .data_definitions_nav_icon_import_definition { background: url(../img/import_definition_white.svg) center center no-repeat !important; } -.data_definitions_icon_export_definition, .processmanager_icon_executable_type_exportdefinition { +.data_definitions_icon_export_definition { background: url(../img/export_definition.svg) center center no-repeat !important; } diff --git a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_contextmenu.js b/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_contextmenu.js deleted file mode 100644 index 7b14742c..00000000 --- a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_contextmenu.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This source file is available under two different licenses: - * - GNU General Public License version 3 (GPLv3) - * - Data Definitions Commercial License (DDCL) - * Full copyright and license information is available in - * LICENSE.md which is distributed with this source code. - * - * @copyright Copyright (c) CORS GmbH (https://www.cors.gmbh) in combination with instride AG (https://www.instride.ch) - * @license GPLv3 and DDCL - */ - -document.addEventListener(pimcore.events.prepareObjectTreeContextMenu, function (event) { - if (!Ext.ClassManager.get('Executable')) { - Ext.define('Executable', { - extend: 'Ext.data.Model', - fields: [ - {name: 'name', type: 'string'}, - ] - }); - } - - const tree = event.detail.menu; - const item = event.detail.object; - - Ext.create('Ext.data.Store', { - model: 'Executable', - proxy: { - type: 'ajax', - url: '/admin/process_manager/executables/list-by-type', - extraParams: { - type: 'exportdefinition' - }, - reader: { - type: 'json', - rootProperty: 'data' - } - }, - sorters: [{ - property: 'name', - direction: 'ASC' - }], - sortRoot: 'data', - autoLoad: true, - listeners: { - refresh: function (store) { - var exportMenu = []; - store.each(function (executable) { - exportMenu.push({ - text: executable.get('name'), - iconCls: "pimcore_icon_object pimcore_icon_overlay_add", - handler: function () { - Ext.Ajax.request({ - url: '/admin/process_manager/executables/run', - params: { - id: executable.id, - startupConfig: Ext.encode({ - root: item.get('id'), - }), - csrfToken: pimcore.settings['csrfToken'] - }, - method: 'POST', - success: function (result) { - result = Ext.decode(result.responseText); - - if (result.success) { - Ext.Msg.alert(t('success'), t('processmanager_executable_started')); - } else { - Ext.Msg.alert(t('error'), result.message); - } - }.bind(this) - }); - } - }); - }); - - if (exportMenu) { - tree.add([ - {xtype: 'menuseparator'}, - { - text: t("data_definitions_processmanager_export_from_here"), - iconCls: "pimcore_icon_object pimcore_icon_overlay_download", - menu: exportMenu - } - ]); - } - } - } - }); -}); diff --git a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_definitions.js b/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_definitions.js deleted file mode 100644 index 64f92f13..00000000 --- a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_definitions.js +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This source file is available under two different licenses: - * - GNU General Public License version 3 (GPLv3) - * - Data Definitions Commercial License (DDCL) - * Full copyright and license information is available in - * LICENSE.md which is distributed with this source code. - * - * @copyright Copyright (c) CORS GmbH (https://www.cors.gmbh) in combination with instride AG (https://www.instride.ch) - * @license GPLv3 and DDCL - */ - -document.addEventListener('processmanager.ready', function () { - processmanager.executable.types.exportdefinition = Class.create(pimcore.plugin.processmanager.executable.abstractType, { - getItems: function () { - pimcore.globalmanager.get('data_definitions_export_definitions').load(); - - return [{ - xtype: 'combo', - fieldLabel: t('data_definitions_export_definitions'), - name: 'definition', - displayField: 'name', - valueField: 'id', - store: pimcore.globalmanager.get('data_definitions_export_definitions'), - value: this.data.settings.definition, - allowBlank: false - }, { - xtype: 'fieldcontainer', - fieldLabel: t('data_definitions_processmanager_params'), - layout: 'hbox', - width: 500, - value: this.data.settings.filePath, - items: [{ - xtype: "textfield", - name: 'params', - id: 'data_definitions_processmanager_params', - width: 450, - value: this.data.settings.params, - allowBlank: true - }] - }]; - } - }); -}); diff --git a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_search.js b/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_search.js deleted file mode 100644 index 25fec4c4..00000000 --- a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/export_search.js +++ /dev/null @@ -1,107 +0,0 @@ -/* - * This source file is available under two different licenses: - * - GNU General Public License version 3 (GPLv3) - * - Data Definitions Commercial License (DDCL) - * Full copyright and license information is available in - * LICENSE.md which is distributed with this source code. - * - * @copyright Copyright (c) CORS GmbH (https://www.cors.gmbh) in combination with instride AG (https://www.instride.ch) - * @license GPLv3 and DDCL - */ - -pimcore.object.search = Class.create(pimcore.object.search, { - createGrid: function ($super, fromConfig, response, settings, save) { - if (!Ext.ClassManager.get('Executable')) { - Ext.define('Executable', { - extend: 'Ext.data.Model', - fields: [ - {name: 'name', type: 'string'}, - ] - }); - } - - this.exportFromHere = new Ext.SplitButton({ - text: t('data_definitions_processmanager_export_from_here'), - iconCls: "pimcore_icon_object pimcore_icon_overlay_add", - menu: [] - }); - - var $this = this; - Ext.create('Ext.data.Store', { - model: 'Executable', - proxy: { - type: 'ajax', - url: '/admin/process_manager/executables/list-by-type', - extraParams: { - type: 'exportdefinition' - }, - reader: { - type: 'json', - rootProperty: 'data' - } - }, - sorters: [{ - property: 'name', - direction: 'ASC' - }], - sortRoot: 'data', - autoLoad: true, - listeners: { - refresh: function (store) { - var exportMenu = []; - store.each(function (executable) { - exportMenu.push({ - text: executable.get('name'), - iconCls: "pimcore_icon_object pimcore_icon_overlay_add", - handler: $this.exportObjects.bind($this, executable) - }); - }); - - if (exportMenu) { - $this.exportFromHere.down("menu").add(exportMenu); - } - } - } - }); - - $super(fromConfig, response, settings, save); - this.grid.down("toolbar").add([ - "-", - this.exportFromHere, - "-" - ]); - }, - - exportObjects: function (executable, menuItem) { - var selected = this.grid.getSelectionModel().getSelection(), ids = []; - if (selected) { - ids = selected.map(function (item) { - return item.id; - }); - } - - Ext.Ajax.request({ - url: '/admin/process_manager/executables/run', - params: { - id: executable.id, - startupConfig: Ext.encode({ - root: this.object.id, - query: this.searchField.getValue(), - only_direct_children: this.checkboxOnlyDirectChildren.getValue(), - ids: ids, - }), - csrfToken: pimcore.settings['csrfToken'] - }, - method: 'POST', - success: function (result) { - result = Ext.decode(result.responseText); - - if (result.success) { - Ext.Msg.alert(t('success'), t('processmanager_executable_started')); - } else { - Ext.Msg.alert(t('error'), result.message); - } - }.bind(this) - }); - } -}); diff --git a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/import_definitions.js b/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/import_definitions.js deleted file mode 100644 index 97e3d15a..00000000 --- a/src/DataDefinitionsBundle/Resources/public/pimcore/js/process_manager/import_definitions.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - * This source file is available under two different licenses: - * - GNU General Public License version 3 (GPLv3) - * - Data Definitions Commercial License (DDCL) - * Full copyright and license information is available in - * LICENSE.md which is distributed with this source code. - * - * @copyright Copyright (c) CORS GmbH (https://www.cors.gmbh) in combination with instride AG (https://www.instride.ch) - * @license GPLv3 and DDCL - */ - -document.addEventListener('processmanager.ready', function () { - processmanager.executable.types.importdefinition = Class.create(pimcore.plugin.processmanager.executable.abstractType, { - getItems: function () { - pimcore.globalmanager.get('data_definitions_definitions').load(); - - return [{ - xtype: 'combo', - fieldLabel: t('data_definitions_import_definitions'), - name: 'definition', - displayField: 'name', - valueField: 'id', - store: pimcore.globalmanager.get('data_definitions_definitions'), - value: this.data.settings.definition, - allowBlank: false - }, { - xtype: 'fieldcontainer', - fieldLabel: t('data_definitions_processmanager_params'), - layout: 'hbox', - width: 500, - value: this.data.settings.filePath, - items: [{ - xtype: "textfield", - name: 'params', - id: 'data_definitions_processmanager_params', - width: 450, - value: this.data.settings.params, - allowBlank: true - }, { - xtype: "button", - text: t('find'), - iconCls: "pimcore_icon_search", - style: "margin-left: 5px", - handler: this.openSearchEditor.bind(this) - }, - { - xtype: "button", - text: t('upload'), - cls: "pimcore_inline_upload", - iconCls: "pimcore_icon_upload", - style: "margin-left: 5px", - handler: function (item) { - this.uploadDialog(); - }.bind(this) - }] - }]; - }, - - uploadDialog: function () { - pimcore.helpers.assetSingleUploadDialog("", "path", function (res) { - try { - var data = Ext.decode(res.response.responseText); - if (data["id"]) { - this.setValue(data["fullpath"]); - } - } catch (e) { - console.log(e); - } - }.bind(this)); - }, - - openSearchEditor: function () { - pimcore.helpers.itemselector( - false, - this.addDataFromSelector.bind(this), - { - type: ["asset"], - subtype: {}, - specific: {} - } - ); - }, - - addDataFromSelector: function (data) { - this.setValue(data.fullpath); - }, - - setValue: function (value) { - var params = '{"file":"var/assets' + value + '"}'; - Ext.getCmp('data_definitions_processmanager_params').setValue(params); - } - }); -}); diff --git a/src/DataDefinitionsBundle/Resources/translations/admin.en.yml b/src/DataDefinitionsBundle/Resources/translations/admin.en.yml index 3c577562..a99e2ab8 100644 --- a/src/DataDefinitionsBundle/Resources/translations/admin.en.yml +++ b/src/DataDefinitionsBundle/Resources/translations/admin.en.yml @@ -50,8 +50,6 @@ data_definitions_uninstalled: 'ImportDefinitions has been uninstalled' data_definitions_success_document: 'Success Notification Document' data_definitions_failure_document: 'Failure Notification Document' data_definitions_definition: 'Definition' -data_definitions_processmanager_params: 'Params' -data_definitions_processmanager_export_from_here: 'Export from here' data_definitions_skip_new_objects: 'Skip New Objects' data_definitions_skip_existing_objects: 'Skip Existing Objects' data_definitions_csv_headers: 'CSV Headers' @@ -88,7 +86,5 @@ data_definitions_automap: 'Auto Map' data_definitions_automap_exact: 'Exact' data_definitions_automap_fuzzy: 'Fuzzy' data_definitions_invalid_mapping: 'Invalid mapping!' -processmanager_type_importdefinition: 'Import Definition' -processmanager_type_exportdefinition: 'Export Definition' data_definitions_import_rules: 'Import Rules' data_definitions_persister: 'Persister'