. */ namespace SP\Domain\Import\Services; use DOMDocument; use DOMElement; use SP\Core\Application; use SP\Core\Events\EventDispatcher; use SP\Core\Exceptions\SPException; use SP\Domain\Config\ConfigServiceInterface; use SP\Domain\Config\In\ConfigDataInterface; use SP\Domain\Import\XmlFileImportInterface; /** * Class XmlImportBase * * @package SP\Domain\Import\Services */ abstract class XmlImportBase { use ImportTrait; protected XmlFileImportInterface $xmlFileImport; protected DOMDocument $xmlDOM; protected EventDispatcher $eventDispatcher; protected ConfigServiceInterface $configService; protected ConfigDataInterface $configData; /** * ImportBase constructor. */ public function __construct( Application $application, ImportHelper $importHelper, ConfigServiceInterface $configService, XmlFileImportInterface $xmlFileImport, ImportParams $importParams ) { $this->eventDispatcher = $application->getEventDispatcher(); $this->xmlFileImport = $xmlFileImport; $this->importParams = $importParams; $this->accountService = $importHelper->getAccountService(); $this->categoryService = $importHelper->getCategoryService(); $this->clientService = $importHelper->getClientService(); $this->tagService = $importHelper->getTagService(); $this->configService = $configService; $this->configData = $application->getConfig()->getConfigData(); $this->xmlDOM = $xmlFileImport->getXmlDOM(); } /** * Obtener los datos de los nodos * * @param string $nodeName Nombre del nodo principal * @param string $childNodeName Nombre de los nodos hijos * @param callable $callback Método a ejecutar * @param bool $required Indica si el nodo es requerido * * @throws ImportException */ protected function getNodesData( string $nodeName, string $childNodeName, callable $callback, bool $required = true ): void { $nodeList = $this->xmlDOM->getElementsByTagName($nodeName); if ($nodeList->length > 0) { if (!is_callable($callback)) { throw new ImportException(__u('Invalid Method'), SPException::WARNING); } /** @var DOMElement $nodes */ foreach ($nodeList as $nodes) { /** @var DOMElement $Account */ foreach ($nodes->getElementsByTagName($childNodeName) as $node) { $callback($node); } } } elseif ($required === true) { throw new ImportException( __u('Invalid XML format'), SPException::WARNING, sprintf(__('"%s" node doesn\'t exist'), $nodeName) ); } } }