PlainSQLiteBlog/lib/Settings.php

83 lines
2.4 KiB
PHP

<?php
class Settings
{
private static $varValues = null;
public static function get($strSettingName=null, $strDefault="", $intSave=0)
{
global $c;
$strOutput = $strDefault;
if (Settings::$varValues == null)
{
$varRows = $c->query("SELECT * from settings order by setting");
$varValues = [];
foreach ($varRows as $r)
$varValues[$r["setting"]] = $r["value"];
Settings::$varValues = $varValues;
}
if ($strSettingName == null)
return Settings::$varValues;
if (array_key_exists($strSettingName, Settings::$varValues))
$strOutput = Settings::$varValues[$strSettingName];
else
{
if ($intSave)
Settings::set($strSettingName, $strDefault);
}
return trim($strOutput);
}
public static function set($strSettingName, $strValue)
{
Settings::$varValues = null;
global $c;
$strValue = trim($strValue);
$varExisting = $c->query("
SELECT *
from settings
where
setting like ?
order by
id desc",
$strSettingName);
if (count($varExisting) !== 1)
{
$c->query("DELETE from settings where setting like ?", $strSettingName);
$c->query("INSERT into settings (setting, value) values (?, ?)", $strSettingName, $strValue);
}
$c->query(
"UPDATE settings
set
value = ?
where setting like ?",
$strValue,
$strSettingName);
}
public static function makeReplacements($strText)
{
// Handle nested setting value injection:
preg_match_all("/\{\{([A-Za-z0-9_]{1,})\}\}/i", $strText, $varMatches);
if (count($varMatches[1]) > 0)
foreach ($varMatches[1] as $varMatch)
{
$strKey = $varMatch;
$strValue = Settings::get($strKey);
$strText = preg_replace("/\{\{$strKey\}\}/i", $strValue, $strText);
}
return $strText;
}
}
?>