Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
20 / 20
Registry
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
13
100.00% covered (success)
100.00%
20 / 20
 get
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
8 / 8
 set
100.00% covered (success)
100.00%
1 / 1
6
100.00% covered (success)
100.00%
7 / 7
 del
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
<?php
/**
 *  PHP Portal Engine v3.0.0
 *  https://github.com/bztsrc/phppe3/.
 *
 *  Copyright LGPL 2016 bzt
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published
 *  by the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *   <http://www.gnu.org/licenses/>
 *
 * @file vendor/phppe/Core/libs/Registry.php
 *
 * @author bzt
 * @date 1 Jan 2016
 * @brief key-value registry for Extension configuration, included in Pack
 */
namespace PHPPE;
//L("Registry")
class Registry extends Extension
{
    /**
     * Read a parameter value for key from registry. Will return default if key not found.
     *
     * @param string    key
     * @param mixed     optional default value
     *
     * @return mixed    value
     */
    public static function get($key, $default = '')
    {
        //sanitize key
        $key = preg_replace('/[^a-zA-Z0-9_]/', '', $key);
        $value = null;
        //try to read from database...
        try {
            $value = DS::field('data', 'registry', 'name=?', '', '', [$key]);
        } catch (\Exception $e) {
            //...fallback to files
            $v = trim(@file_get_contents('data/registry/'.$key));
            $value = json_decode($v);
            if (!is_array($value) && !is_object($value)) $value = $v;
        }
        return $value == null ? $default : $value;
    }
    /**
     * Store a parameter value for key into registry.
     *
     * @param string    key
     * @param mixed     value
     */
    public static function set($key, $value)
    {
        //sanitize key
        $key = preg_replace('/[^a-zA-Z0-9_]/', '', $key);
        $value = is_array($value) || is_object($value) ? json_encode($value) : trim($value);
        //try to save to database...
        try {
            if (!DS::exec('REPLACE INTO registry (name,data) VALUES (?,?)', [$key, $value])) {
                //!if exec returns 0 records updated somehow...
                // @codeCoverageIgnoreStart
                throw new \Exception();
            }
                // @codeCoverageIgnoreEnd
            else {
                return true;
            }
        } catch (\Exception $e) {
            //...fallback to files
            @mkdir('data/registry');
            return file_put_contents('data/registry/'.$key, $value) > 0 ? true : false;
        }
    }
    /**
     * Remove a parameter from registry.
     *
     * @param string    key
     */
    public static function del($key)
    {
        //sanitize key
        $key = preg_replace('/[^a-zA-Z0-9_]/', '', $key);
        //remove both database record as well as file
        try {
            @DS::exec('DELETE FROM registry WHERE name=?', [$key]);
        } catch (\Exception $e) {
        }
        @unlink('data/registry/'.$key);
    }
}