mirror of
https://github.com/Icinga/icingaweb2-module-director.git
synced 2025-07-31 01:34:12 +02:00
BranchSettings: some generic settings and helpers
This commit is contained in:
parent
90b5f6fdac
commit
a1fb42878c
121
library/Director/Db/Branch/BranchSettings.php
Normal file
121
library/Director/Db/Branch/BranchSettings.php
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
namespace Icinga\Module\Director\Db\Branch;
|
||||
|
||||
use Icinga\Module\Director\Data\Json;
|
||||
use function in_array;
|
||||
|
||||
/**
|
||||
* Hardcoded branch-related settings
|
||||
*/
|
||||
class BranchSettings
|
||||
{
|
||||
// TODO: Ranges is weird. key = scheduled_downtime_id, range_type, range_key
|
||||
const ENCODED_ARRAYS = ['imports', 'groups', 'ranges', 'users', 'usergroups'];
|
||||
|
||||
const ENCODED_DICTIONARIES = ['vars', 'arguments'];
|
||||
|
||||
const BRANCH_SPECIFIC_PROPERTIES = [
|
||||
'uuid',
|
||||
'branch_uuid',
|
||||
'branch_created',
|
||||
'branch_deleted',
|
||||
'set_null',
|
||||
];
|
||||
|
||||
const BRANCH_BOOLEANS = [
|
||||
'branch_created',
|
||||
'branch_deleted',
|
||||
];
|
||||
|
||||
const RELATED_SETS = [
|
||||
'types',
|
||||
'states',
|
||||
];
|
||||
|
||||
public static function propertyIsEncodedArray($property)
|
||||
{
|
||||
return in_array($property, self::ENCODED_ARRAYS, true);
|
||||
}
|
||||
|
||||
public static function propertyIsRelatedSet($property)
|
||||
{
|
||||
// TODO: get from object class
|
||||
return in_array($property, self::RELATED_SETS, true);
|
||||
}
|
||||
|
||||
public static function propertyIsEncodedDictionary($property)
|
||||
{
|
||||
return in_array($property, self::ENCODED_DICTIONARIES, true);
|
||||
}
|
||||
|
||||
public static function propertyIsBranchSpecific($property)
|
||||
{
|
||||
return in_array($property, self::BRANCH_SPECIFIC_PROPERTIES, true);
|
||||
}
|
||||
|
||||
public static function flattenEncodedDicationaries(array &$properties)
|
||||
{
|
||||
foreach (self::ENCODED_DICTIONARIES as $property) {
|
||||
self::flattenProperty($properties, $property);
|
||||
}
|
||||
}
|
||||
|
||||
public static function normalizeBranchedObjectFromDb($row)
|
||||
{
|
||||
$normalized = [];
|
||||
$row = (array) $row;
|
||||
foreach ($row as $key => $value) {
|
||||
if (! static::propertyIsBranchSpecific($key)) {
|
||||
if (is_resource($value)) {
|
||||
$value = stream_get_contents($value);
|
||||
}
|
||||
if ($value !== null && static::propertyIsEncodedArray($key)) {
|
||||
$value = Json::decode($value);
|
||||
}
|
||||
if ($value !== null && static::propertyIsRelatedSet($key)) {
|
||||
// TODO: We might want to combine them (current VS branched)
|
||||
$value = Json::decode($value);
|
||||
}
|
||||
if ($value !== null && static::propertyIsEncodedDictionary($key)) {
|
||||
$value = Json::decode($value);
|
||||
}
|
||||
if ($value !== null) {
|
||||
$normalized[$key] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
static::flattenEncodedDicationaries($row);
|
||||
if (isset($row['set_null'])) {
|
||||
foreach (Json::decode($row['set_null']) as $property) {
|
||||
$normalized[$property] = null;
|
||||
}
|
||||
}
|
||||
foreach (self::BRANCH_BOOLEANS as $key) {
|
||||
if ($row[$key] === 'y') {
|
||||
$row[$key] = true;
|
||||
} elseif ($row[$key] === 'n') {
|
||||
$row[$key] = false;
|
||||
} else {
|
||||
throw new \RuntimeException(sprintf(
|
||||
"Boolean DB property expected, got '%s' for '%s'",
|
||||
$row[$key],
|
||||
$key
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
return $normalized;
|
||||
}
|
||||
|
||||
public static function flattenProperty(array &$properties, $property)
|
||||
{
|
||||
// TODO: dots in varnames -> throw or escape?
|
||||
if (isset($properties[$property])) {
|
||||
foreach ((array) $properties[$property] as $key => $value) {
|
||||
$properties["$property.$key"] = $value;
|
||||
}
|
||||
unset($properties[$property]);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user