oont-contents/plugins/woocommerce-pdf-invoices-packing-slips/ubl/Builders/SabreBuilder.php
2025-02-10 13:57:45 +01:00

46 lines
1 KiB
PHP

<?php
namespace WPO\IPS\UBL\Builders;
use WPO\IPS\Vendor\Sabre\Xml\Service;
use WPO\IPS\Vendor\Sabre\Xml\Writer;
use WPO\IPS\UBL\Documents\Document;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
class SabreBuilder extends Builder {
private Service $service;
private Document $document;
public function __construct() {
$this->service = new Service();
}
public function build( Document $document ): string {
$this->document = $document;
// Map namespaces (Sabre requires URI => prefix)
$this->service->namespaceMap = array_flip( $document->get_namespaces() );
return $this->service->write(
$document->get_root_element(),
function ( Writer $writer ) {
$this->xmlSerialize( $writer );
}
);
}
public function xmlSerialize( Writer $writer ): void {
$additionalElements = $this->document->get_additional_root_elements();
if ( ! empty( $additionalElements ) && is_array( $additionalElements ) ) {
$writer->writeAttributes( $additionalElements );
}
$writer->write( $this->document->get_data() );
}
}