%PDF- %PDF-
| Direktori : /backups/router/usr/local/opnsense/mvc/app/config/ |
| Current File : //backups/router/usr/local/opnsense/mvc/app/config/AppConfig.php |
<?php
/*
* Copyright (C) 2024 Deciso B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Core;
class AppConfig
{
/**
* @var application config data
*/
private static $data = [];
/**
* @var self::$data as StdClass
*/
private static $obj = null;
/**
* construct new application config object, keep $data when not offered.
*/
public function __construct($new_data = null)
{
if ($new_data != null) {
self::$data = $new_data;
// simple conversion from array to StdClass container, current representation of self::$data.
self::$obj = json_decode(json_encode(self::$data));
}
}
/**
* @param string $name
* @return StdClass or simple type
*/
public function __get($name)
{
if (isset(self::$obj->$name)) {
return self::$obj->$name;
}
return null;
}
/**
* @param array $cnf configuration data to merge into the app config container
*/
public function merge($cnf)
{
self::$data = array_merge_recursive(self::$data, $cnf);
// simple conversion from array to StdClass container, current representation of self::$data.
self::$obj = json_decode(json_encode(self::$data));
}
/**
* update a property inside the container
* @param string $path in dot notation a.b.c
* @param mixed $value
* @return bool true when found and updated
*/
public function update($path, $value)
{
$tmp = &self::$data;
foreach (explode('.', $path) as $key) {
if (isset($tmp[$key])) {
$tmp = &$tmp[$key];
} else {
return false;
}
}
$tmp = $value;
self::$obj = json_decode(json_encode(self::$data));
return true;
}
}