Apply feedback and describe the encoding method

This commit is contained in:
Philipp Holzer 2023-01-15 11:57:43 +01:00
parent 4c28f9cf9c
commit bc60eb6cb7
Signed by: nupplaPhil
GPG key ID: 24A7501396EB5432

View file

@ -27,7 +27,17 @@ namespace Friendica\Core\Config\Util;
class ConfigFileTransformer
{
/**
* The public method to start the encoding
* This method takes an array of config values and applies some standard rules for formatting on it
*
* Beware that the applied rules follow some basic formatting principles for node.config.php
* and doesn't support any custom formatting rules.
*
* f.e. associative array and list formatting are very complex with newlines and indentations, thus there are
* three hardcoded types of formatting for them.
*
* a negative example, what's NOT working:
* key => [ value1, [inner_value1, inner_value2], value2]
* Since this isn't necessary for config values, there's no further logic handling such complex-list-in-list scenarios
*
* @param array $data A full config array
*
@ -49,20 +59,20 @@ class ConfigFileTransformer
/**
* Extracts an inner config array.
* Either as a Key => Value pair array or as an assoziative array
* Either as an associative array or as a list
*
* @param array $config The config array which should get extracted
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inAssoziativeArray If true, the current array resides inside another assoziative array. Different rules may be applicable
* @param array $config The config array which should get extracted
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inList If true, the current array resides inside another list. Different rules may be applicable
*
* @return string The config string
*/
protected static function extractArray(array $config, int $level = 0, bool $inAssoziativeArray = false): string
protected static function extractArray(array $config, int $level = 0, bool $inList = false): string
{
if (array_values($config) === $config) {
return self::extractAssoziativeArray($config, $level, $inAssoziativeArray);
return self::extractList($config, $level, $inList);
} else {
return self::extractKeyValueArray($config, $level, $inAssoziativeArray);
return self::extractAssociativeArray($config, $level, $inList);
}
}
@ -75,18 +85,18 @@ class ConfigFileTransformer
* ...
* ]
*
* @param array $config The key-value array
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inAssoziativeArray If true, the current array resides inside another assoziative array. Different rules may be applicable
* @param array $config The associative/key-value array
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inList If true, the current array resides inside another list. Different rules may be applicable
*
* @return string The config string
*/
protected static function extractKeyValueArray(array $config, int $level = 0, bool $inAssoziativeArray = false): string
protected static function extractAssociativeArray(array $config, int $level = 0, bool $inList = false): string
{
$string = '';
// Because we're in an assoziative array, we have to add a line-break first
if ($inAssoziativeArray) {
// Because we're in a list, we have to add a line-break first
if ($inList) {
$string .= PHP_EOL . str_repeat("\t", $level);
}
@ -106,7 +116,7 @@ class ConfigFileTransformer
}
/**
* Extracts an assoziative array and save it into a string
* Extracts a list and save it into a string
* output1 - simple:
* [ value, value, value ]
*
@ -120,13 +130,13 @@ class ConfigFileTransformer
* ],
* ]
*
* @param array $config The assoziative array
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inAssoziativeArray If true, the current array resides inside another assoziative array. Different rules may be applicable
* @param array $config The list
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inList If true, the current array resides inside another list. Different rules may be applicable
*
* @return string The config string
*/
protected static function extractAssoziativeArray(array $config, int $level = 0, bool $inAssoziativeArray = false): string
protected static function extractList(array $config, int $level = 0, bool $inList = false): string
{
$string = '[';
@ -150,8 +160,8 @@ class ConfigFileTransformer
* Skip any other logic since this isn't applicable for an array in an array
*/
if ($isArray) {
$string .= PHP_EOL . str_repeat("\t", $level + 1);
$string .= static::extractArray($config[$i], $level + 1, $inAssoziativeArray) . ',';
$string .= PHP_EOL . str_repeat("\t", $level + 1);
$string .= static::extractArray($config[$i], $level + 1, $inList) . ',';
continue;
}
@ -183,13 +193,13 @@ class ConfigFileTransformer
/**
* Transforms one config value and returns the corresponding text-representation
*
* @param mixed $value Any value to transform
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inAssoziativeArray If true, the current array resides inside another assoziative array. Different rules may be applicable
* @param mixed $value Any value to transform
* @param int $level The current level of recursion (necessary for tab-indentation calculation)
* @param bool $inList If true, the current array resides inside another list. Different rules may be applicable
*
* @return string
*/
protected static function transformConfigValue($value, int $level = 0, bool $inAssoziativeArray = false): string
protected static function transformConfigValue($value, int $level = 0, bool $inList = false): string
{
switch (gettype($value)) {
case "boolean":
@ -200,7 +210,7 @@ class ConfigFileTransformer
case "string":
return sprintf('\'%s\'', addcslashes($value, '\'\\'));
case "array":
return static::extractArray($value, ++$level, $inAssoziativeArray);
return static::extractArray($value, ++$level, $inList);
case "NULL":
return "null";
case "object":