79 lines
2.0 KiB
Plaintext
79 lines
2.0 KiB
Plaintext
|
/**
|
||
|
* Default indentation value
|
||
|
*
|
||
|
* @var int
|
||
|
* @since 3.4.0
|
||
|
*/
|
||
|
protected int $indent = 2;
|
||
|
|
||
|
/**
|
||
|
* Method to export a set of values to a PHP array
|
||
|
*
|
||
|
* @param string|null $path Registry path (e.g. joomla.content.showauthor)
|
||
|
* @param int $indentation The default indentation
|
||
|
*
|
||
|
* @return ?string The var set being exported as a PHP array
|
||
|
* @since 3.4.0
|
||
|
*/
|
||
|
public function varExport(?string $path = null, int $indentation = 2): ?string
|
||
|
{
|
||
|
// Load the data array
|
||
|
if ($path === null && $this->isActive())
|
||
|
{
|
||
|
$data = $this->allActive();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$data = $this->get($path);
|
||
|
}
|
||
|
|
||
|
// check if we have data
|
||
|
if ($data === null)
|
||
|
{
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
// set the default indentation value
|
||
|
$this->indent = $indentation;
|
||
|
|
||
|
// convert to string
|
||
|
$data = var_export($data, true);
|
||
|
|
||
|
// replace all space with system indentation
|
||
|
$data = preg_replace_callback("/^(\s{2})(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(\s{2})?(.*)/m", [$this, 'convertIndent'], $data);
|
||
|
|
||
|
// convert all array to []
|
||
|
$array = preg_split("/\r\n|\n|\r/", $data);
|
||
|
$array = preg_replace(["/\s*array\s\($/", "/\)(,)?$/", "/\s=>\s$/"], [NULL, ']$1', ' => ['], $array);
|
||
|
$data = implode(PHP_EOL, array_filter(["["] + $array));
|
||
|
|
||
|
// add needed indentation to the last ]
|
||
|
$data = preg_replace("/^(\])/m", Indent::_($indentation) . '$1', $data);
|
||
|
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Method to convert found of grouped spaces to system indentation
|
||
|
*
|
||
|
* @param array $matches The regex array of matching values
|
||
|
*
|
||
|
* @return string The resulting string.
|
||
|
* @since 3.4.0
|
||
|
*/
|
||
|
protected function convertIndent(array $matches): string
|
||
|
{
|
||
|
// set number to indent by default
|
||
|
$indent = Indent::_($this->indent);
|
||
|
|
||
|
// update each found space (group) with one indentation
|
||
|
foreach (range(1, 11) as $space)
|
||
|
{
|
||
|
if (strlen((string) $matches[$space]) > 0)
|
||
|
{
|
||
|
$indent .= Indent::_(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $indent . $matches[12];
|
||
|
}
|