diff --git a/src/ZugferdMapper.php b/src/ZugferdMapper.php index e075f1ed..2f79e98d 100644 --- a/src/ZugferdMapper.php +++ b/src/ZugferdMapper.php @@ -64,6 +64,42 @@ class ZugferdMapper */ protected const KEY_TOCODE = "tocode"; + /** + * Load mappings from JSON string + * + * @param string $json + * @return boolean + */ + public static function loadFromJson(string $json): bool + { + $jsonDecoded = json_decode($json, true); + + if (!is_array($jsonDecoded)) { + return false; + } + } + + /** + * Saves mappings to JSON string + * + * @return string + */ + public static function saveToJson(): string + { + return json_encode(static::$mappings, JSON_PRETTY_PRINT | JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); + } + + /** + * Saves mappings to a JSON file + * + * @param string $filename + * @return boolean + */ + public static function saveToJsonFile(string $filename): bool + { + return file_put_contents($filename, static::saveToJson()) !== false; + } + /** * Add a mapping to the internal mapping list * diff --git a/tests/testcases/MapperTest.php b/tests/testcases/MapperTest.php index 57071d7e..48ad888b 100644 --- a/tests/testcases/MapperTest.php +++ b/tests/testcases/MapperTest.php @@ -179,4 +179,20 @@ function () { } ); } + + public function testSaveToJsonFile(): void + { + $filename = getcwd() . "/mappings.json"; + + ZugferdMapper::addCurrencyMappingIncoming('EUR', 'EUR'); + ZugferdMapper::addCurrencyMappingIncoming('DEM', 'DM'); + ZugferdMapper::addCurrencyMappingOutgoing('EUR', 'EUR'); + ZugferdMapper::addCurrencyMappingOutgoing('DM', 'DEM'); + ZugferdMapper::addUnitCodeMappingIncoming('C62', 'STK'); + ZugferdMapper::addUnitCodeMappingOutgoing('STK', 'C62'); + + ZugferdMapper::saveToJsonFile($filename); + + $this->assertTrue(file_exists($filename)); + } }