315 lines
12 KiB
PHP
315 lines
12 KiB
PHP
<?php
|
|
|
|
if (!defined('AOWOW_REVISION'))
|
|
die('illegal access');
|
|
|
|
if (!CLI)
|
|
die('not in cli mode');
|
|
|
|
|
|
/****************************/
|
|
/* Configure Site variables */
|
|
/****************************/
|
|
|
|
function siteconfig() : void
|
|
{
|
|
$updScripts = [];
|
|
|
|
if (!DB::isConnected(DB_AOWOW))
|
|
{
|
|
CLI::write('Database not yet set up!', CLI::LOG_WARN);
|
|
CLI::write('Please use '.CLI::bold('"php aowow --dbconfig"').' for setup', CLI::LOG_BLANK);
|
|
CLI::write();
|
|
return;
|
|
}
|
|
|
|
function toOptList(string $options, $curVal, bool $bitmask = false) : string
|
|
{
|
|
$result = '';
|
|
foreach (explode(', ', $options) as $opt)
|
|
{
|
|
[$val, $name] = explode(':', $opt);
|
|
$equal = $bitmask ? ($curVal & (1 << $val)) : $curVal == $val;
|
|
|
|
$result .= '['.($equal ? 'x' : ' ').']'.$name.' ';
|
|
}
|
|
|
|
return substr($result, 0, -1);
|
|
}
|
|
|
|
function formatValue($value, $flags, $opts) : string
|
|
{
|
|
if ($flags & Cfg::FLAG_TYPE_BOOL)
|
|
return '[bool] '.($value ? '<Enabled>' : '<Disabled>');
|
|
|
|
if ($flags & Cfg::FLAG_OPT_LIST)
|
|
return '[opt] '.toOptList($opts, $value, false);
|
|
|
|
if ($flags & Cfg::FLAG_BITMASK)
|
|
return '[mask] '.toOptList($opts, $value, true);
|
|
|
|
if ($flags & Cfg::FLAG_TYPE_FLOAT)
|
|
return '[float] '.floatVal($value);
|
|
|
|
if ($flags & Cfg::FLAG_TYPE_INT)
|
|
return '[int] '.intVal($value);
|
|
|
|
// if ($flags & Cfg::FLAG_TYPE_STRING)
|
|
if ($value === '')
|
|
return '[str] '.(($flags & Cfg::FLAG_REQUIRED) ? CLI::red('<empty>') : CLI::grey('<empty>'));
|
|
else
|
|
return '[str] "'.$value.'"';
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
CLI::write('select a numerical index or name to use the corresponding entry');
|
|
CLI::write();
|
|
|
|
$sumNum = 0;
|
|
$cfgList = [];
|
|
$hasEmpty = false;
|
|
$listBuff = [];
|
|
|
|
foreach (Cfg::$categories as $idx => $cat)
|
|
{
|
|
$listBuff[] = '===== '.$cat.' =====';
|
|
|
|
foreach (Cfg::forCategory($idx) as $key => [$value, $flags, $catg, $default, $comment])
|
|
{
|
|
$isPhp = $flags & Cfg::FLAG_PHP;
|
|
|
|
if ($value === '' && ($flags & Cfg::FLAG_REQUIRED))
|
|
$hasEmpty = true;
|
|
|
|
$cfgList[$sumNum] = strtolower($key);
|
|
|
|
$row = '['.CLI::bold($sumNum).'] '.(($sumNum) > 9 ? '' : ' ').($isPhp ? ' PHP ' : ' AOWOW ');
|
|
$row .= str_pad($isPhp ? strtolower($key) : strtoupper($key), 35);
|
|
|
|
$opts = explode(' - ', $comment);
|
|
$row .= formatValue($value, $flags, $opts[1] ?? '');
|
|
|
|
$listBuff[] = $row;
|
|
$sumNum++;
|
|
}
|
|
}
|
|
|
|
foreach ($listBuff as $b)
|
|
CLI::write($b);
|
|
|
|
CLI::write(str_pad('['.CLI::bold($sumNum).']', 21).'add another php configuration');
|
|
CLI::write();
|
|
|
|
if ($hasEmpty)
|
|
{
|
|
CLI::write('please configure the required empty settings', CLI::LOG_WARN);
|
|
CLI::write();
|
|
}
|
|
|
|
if (CLI::read(['idx' => ['', false, false, Cfg::PATTERN_CONF_KEY]], $uiIndex) && $uiIndex && $uiIndex['idx'] !== '')
|
|
{
|
|
$idx = array_search(strtolower($uiIndex['idx']), $cfgList);
|
|
if ($idx === false)
|
|
$idx = intVal($uiIndex['idx']);
|
|
|
|
// add new php setting
|
|
if ($idx == $sumNum)
|
|
{
|
|
CLI::write('Adding additional php configuration.');
|
|
CLI::write();
|
|
|
|
while (true)
|
|
{
|
|
$setting = array(
|
|
'key' => ['option name', false, false, Cfg::PATTERN_CONF_KEY],
|
|
'val' => ['value', ]
|
|
);
|
|
if (CLI::read($setting, $uiSetting) && $uiSetting)
|
|
{
|
|
$key = strtolower($uiSetting['key']);
|
|
if ($err = Cfg::add($key, $uiSetting['val']))
|
|
CLI::write($err, CLI::LOG_ERROR);
|
|
else
|
|
CLI::write('new php configuration added', CLI::LOG_OK);
|
|
|
|
sleep(1);
|
|
CLI::write();
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
CLI::write('edit canceled! returning to list...', CLI::LOG_INFO);
|
|
CLI::write();
|
|
sleep(1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
// edit existing setting
|
|
else if ($idx >= 0 && $idx < $sumNum)
|
|
{
|
|
[$value, $flags, , $default, $comment] = Cfg::get($cfgList[$idx], false, true);
|
|
$key = $cfgList[$idx];
|
|
$info = explode(' - ', $comment);
|
|
$buff = '';
|
|
|
|
$buff .= $flags & Cfg::FLAG_PHP ? 'PHP: ' : 'AOWOW: ';
|
|
$buff .= $flags & Cfg::FLAG_PHP ? $key : 'Cfg::'.strtoupper($key);
|
|
|
|
if (!empty($info[0]))
|
|
$buff .= ' - '.$info[0];
|
|
|
|
CLI::write($buff);
|
|
CLI::write();
|
|
CLI::write('VALUE: '.formatValue($value, $flags, $info[1] ?? ''));
|
|
CLI::write();
|
|
CLI::write('['.CLI::bold('E').']dit');
|
|
|
|
if (!($flags & Cfg::FLAG_PERSISTENT))
|
|
CLI::write('['.CLI::bold('D').']elete');
|
|
|
|
if ($default)
|
|
CLI::write('['.CLI::bold('R').']estore Default - '.$default);
|
|
|
|
CLI::write();
|
|
|
|
while (true)
|
|
{
|
|
if (CLI::read(['idx' => ['', true, true, '/[edr]/i']], $uiEDR) && $uiEDR)
|
|
{
|
|
switch (strtoupper($uiEDR['idx']))
|
|
{
|
|
case 'E': // edit value
|
|
$pattern = false;
|
|
$single = false;
|
|
$prompt = ['idx' => ['Select new value', false, &$single, &$pattern]];
|
|
|
|
if ($flags & Cfg::FLAG_OPT_LIST)
|
|
{
|
|
foreach (explode(', ', $info[1]) as $option)
|
|
{
|
|
[$val, $name] = explode(':', $option);
|
|
CLI::write('['.CLI::bold($val).'] '.$name);
|
|
}
|
|
$single = true;
|
|
$pattern = '/\d/';
|
|
}
|
|
else if ($flags & Cfg::FLAG_BITMASK)
|
|
{
|
|
CLI::write('Bitmask: sum fields to select multiple options');
|
|
foreach (explode(', ', $info[1]) as $option)
|
|
{
|
|
[$val, $name] = explode(':', $option);
|
|
CLI::write('['.CLI::bold(1 << $val).']'.str_pad('', 6 - strlen(1 << $val)).$name);
|
|
}
|
|
$pattern = '/\d+/';
|
|
}
|
|
else if ($flags & Cfg::FLAG_TYPE_BOOL)
|
|
{
|
|
CLI::write('['.CLI::bold(0).'] Disabled');
|
|
CLI::write('['.CLI::bold(1).'] Enabled');
|
|
|
|
$single = true;
|
|
$pattern = '/[01]/';
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
if (CLI::read($prompt, $uiValue))
|
|
{
|
|
CLI::write();
|
|
|
|
$inp = $uiValue['idx'] ?? '';
|
|
|
|
if ($err = Cfg::set($key, $inp, $updScripts))
|
|
{
|
|
CLI::write($err, CLI::LOG_ERROR);
|
|
sleep(1);
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
CLI::write('setting updated', CLI::LOG_OK);
|
|
sleep(1);
|
|
break 3;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CLI::write('edit canceled! returning to selection...', CLI::LOG_INFO);
|
|
sleep(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
break 2;
|
|
case 'R': // restore default
|
|
if (!$default)
|
|
continue 2;
|
|
|
|
if ($err = Cfg::reset($key, $updScripts))
|
|
CLI::write($err, CLI::LOG_ERROR);
|
|
else
|
|
CLI::write('default value restored', CLI::LOG_OK);
|
|
|
|
sleep(1);
|
|
break 2;
|
|
case 'D': // delete config pair
|
|
if ($flags & Cfg::FLAG_PERSISTENT)
|
|
continue 2;
|
|
|
|
if ($err = Cfg::delete($key))
|
|
CLI::write($err, CLI::LOG_ERROR);
|
|
else
|
|
CLI::write("php setting deleted ['".$key."': '".$value."']", CLI::LOG_OK);
|
|
|
|
sleep(1);
|
|
break 2;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CLI::write('edit canceled! returning to list...', CLI::LOG_INFO);
|
|
CLI::write();
|
|
sleep(1);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CLI::write('invalid selection', CLI::LOG_ERROR);
|
|
CLI::write();
|
|
sleep(1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CLI::write('leaving site configuration...', CLI::LOG_INFO);
|
|
CLI::write();
|
|
break;
|
|
}
|
|
|
|
// propagate changes to static files
|
|
if ($updScripts && (!class_exists('FileGen') || FileGen::getMode() != FileGen::MODE_FIRSTRUN))
|
|
{
|
|
require_once 'setup/tools/clisetup/build.func.php';
|
|
CLI::write();
|
|
CLI::write('regenerating affected static content', CLI::LOG_INFO);
|
|
CLI::write();
|
|
sleep(1);
|
|
|
|
if ($_ = array_diff($updScripts, build($updScripts)))
|
|
{
|
|
CLI::write(' - the following updates returned with errors, please recheck those - '.implode(', ', $_), CLI::LOG_ERROR);
|
|
sleep(1);
|
|
}
|
|
|
|
sleep(1);
|
|
$updScripts = [];
|
|
}
|
|
}
|
|
}
|
|
|
|
?>
|