mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
Admin/config
* added onUpdate handler to rebuild affected files
This commit is contained in:
@@ -319,25 +319,29 @@ class AjaxAdmin extends AjaxHandler
|
|||||||
{
|
{
|
||||||
$key = trim($this->_get['key']);
|
$key = trim($this->_get['key']);
|
||||||
$val = trim(urldecode($this->_get['val']));
|
$val = trim(urldecode($this->_get['val']));
|
||||||
|
$msg = '';
|
||||||
|
|
||||||
if (!strlen($key))
|
if (!strlen($key))
|
||||||
return 'empty option name given';
|
return 'empty option name given';
|
||||||
|
|
||||||
$flags = DB::Aowow()->selectCell('SELECT `flags` FROM ?_config WHERE `key` = ?', $key);
|
$cfg = DB::Aowow()->selectRow('SELECT `flags`, `value` FROM ?_config WHERE `key` = ?', $key);
|
||||||
if (!$flags)
|
if (!$cfg)
|
||||||
return 'configuration option not found';
|
return 'configuration option not found';
|
||||||
|
|
||||||
if (!($flags & CON_FLAG_TYPE_STRING) && !strlen($val))
|
if (!($cfg['flags'] & CON_FLAG_TYPE_STRING) && !strlen($val))
|
||||||
return 'empty value given';
|
return 'empty value given';
|
||||||
else if ($flags & CON_FLAG_TYPE_INT && !preg_match('/^-?\d+$/i', $val))
|
else if ($cfg['flags'] & CON_FLAG_TYPE_INT && !preg_match('/^-?\d+$/i', $val))
|
||||||
return "value must be integer";
|
return "value must be integer";
|
||||||
else if ($flags & CON_FLAG_TYPE_FLOAT && !preg_match('/^-?\d*(,|.)?\d+$/i', $val))
|
else if ($cfg['flags'] & CON_FLAG_TYPE_FLOAT && !preg_match('/^-?\d*(,|.)?\d+$/i', $val))
|
||||||
return "value must be float";
|
return "value must be float";
|
||||||
else if ($flags & CON_FLAG_TYPE_BOOL)
|
else if ($cfg['flags'] & CON_FLAG_TYPE_BOOL)
|
||||||
$val = (int)!!$val; // *snort* bwahahaa
|
$val = (int)!!$val; // *snort* bwahahaa
|
||||||
|
|
||||||
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $val, $key);
|
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $val, $key);
|
||||||
return '';
|
if (!$this->confOnChange($key, $val, $msg))
|
||||||
|
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $cfg['value'], $key);
|
||||||
|
|
||||||
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function wtSave()
|
protected function wtSave()
|
||||||
@@ -443,4 +447,46 @@ class AjaxAdmin extends AjaxHandler
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function confOnChange($key, $val, &$msg)
|
||||||
|
{
|
||||||
|
$fn = $buildList = null;
|
||||||
|
|
||||||
|
switch ($key)
|
||||||
|
{
|
||||||
|
case 'battlegroup':
|
||||||
|
$buildList = 'realms,realmMenu';
|
||||||
|
break;
|
||||||
|
case 'name_short':
|
||||||
|
$buildList = 'searchboxBody,demo,searchplugin';
|
||||||
|
break;
|
||||||
|
case 'site_host':
|
||||||
|
$buildList = 'searchplugin,demo,power,searchboxBody';
|
||||||
|
break;
|
||||||
|
case 'static_host':
|
||||||
|
$buildList = 'searchplugin,power,searchboxBody,searchboxScript';
|
||||||
|
break;
|
||||||
|
case 'profiler_queue':
|
||||||
|
$fn = function($x) use (&$msg) {
|
||||||
|
if (!$x)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return Profiler::queueStart($msg);
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
default: // nothing to do, everything is fine
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($buildList)
|
||||||
|
{
|
||||||
|
// we need to use exec as build() can only be run from CLI
|
||||||
|
exec('php aowow --build='.$buildList, $out);
|
||||||
|
foreach ($out as $o)
|
||||||
|
if (strstr($o, 'ERR'))
|
||||||
|
$msg .= explode('0m]', $o)[1]."<br />\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fn ? $fn($val) : true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ function firstrun()
|
|||||||
require_once 'setup/tools/sqlGen.class.php';
|
require_once 'setup/tools/sqlGen.class.php';
|
||||||
require_once 'setup/tools/fileGen.class.php';
|
require_once 'setup/tools/fileGen.class.php';
|
||||||
|
|
||||||
SqlGen::init(true);
|
SqlGen::init(SqlGen::MODE_FIRSTRUN);
|
||||||
FileGen::init(true);
|
FileGen::init(FileGen::MODE_FIRSTRUN);
|
||||||
|
|
||||||
/****************/
|
/****************/
|
||||||
/* define steps */
|
/* define steps */
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ if (!CLI)
|
|||||||
function siteconfig()
|
function siteconfig()
|
||||||
{
|
{
|
||||||
$reqKeys = ['site_host', 'static_host'];
|
$reqKeys = ['site_host', 'static_host'];
|
||||||
|
$updScripts = [];
|
||||||
|
|
||||||
if (!DB::isConnected(DB_AOWOW))
|
if (!DB::isConnected(DB_AOWOW))
|
||||||
{
|
{
|
||||||
@@ -22,6 +23,43 @@ function siteconfig()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$onChange = function($key, $val) use (&$updScripts)
|
||||||
|
{
|
||||||
|
$fn = null;
|
||||||
|
|
||||||
|
switch ($key)
|
||||||
|
{
|
||||||
|
case 'battlegroup':
|
||||||
|
array_push($updScripts, 'realms', 'realmMenu');
|
||||||
|
break;
|
||||||
|
case 'name_short':
|
||||||
|
array_push($updScripts, 'searchboxBody', 'demo', 'searchplugin');
|
||||||
|
break;
|
||||||
|
case 'site_host':
|
||||||
|
array_push($updScripts, 'searchplugin', 'demo', 'power', 'searchboxBody');
|
||||||
|
break;
|
||||||
|
case 'static_host':
|
||||||
|
array_push($updScripts, 'searchplugin', 'power', 'searchboxBody', 'searchboxScript');
|
||||||
|
break;
|
||||||
|
case 'profiler_queue':
|
||||||
|
$fn = function($x) {
|
||||||
|
if (!$x)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
$ok = Profiler::queueStart($msg);
|
||||||
|
if ($msg)
|
||||||
|
CLISetup::log($msg, CLISetup::LOG_ERROR);
|
||||||
|
|
||||||
|
return $ok;
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
default: // nothing to do, everything is fine
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $fn ? $fn($val) : true;
|
||||||
|
};
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
@@ -163,11 +201,12 @@ function siteconfig()
|
|||||||
{
|
{
|
||||||
$conf = $cfgList[$inp['idx']];
|
$conf = $cfgList[$inp['idx']];
|
||||||
$info = explode(' - ', $conf['comment']);
|
$info = explode(' - ', $conf['comment']);
|
||||||
|
$key = strtolower($conf['key']);
|
||||||
$buff = '';
|
$buff = '';
|
||||||
|
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
$buff .= $conf['flags'] & CON_FLAG_PHP ? " PHP: " : "AOWOW: ";
|
$buff .= $conf['flags'] & CON_FLAG_PHP ? " PHP: " : "AOWOW: ";
|
||||||
$buff .= $conf['flags'] & CON_FLAG_PHP ? strtolower($conf['key']) : strtoupper('cfg_'.$conf['key']);
|
$buff .= $conf['flags'] & CON_FLAG_PHP ? $key : strtoupper('cfg_'.$conf['key']);
|
||||||
|
|
||||||
if (!empty($info[1]))
|
if (!empty($info[1]))
|
||||||
$buff .= " - ".$info[1];
|
$buff .= " - ".$info[1];
|
||||||
@@ -281,7 +320,17 @@ function siteconfig()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $use['idx'], strtolower($conf['key']));
|
$oldVal = DB::Aowow()->selectCell('SELECT `value` FROM ?_config WHERE `key` = ?', $key);
|
||||||
|
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $use['idx'], $key);
|
||||||
|
|
||||||
|
// postChange returned false => reset value
|
||||||
|
if (!$onChange($key, $use['idx']))
|
||||||
|
{
|
||||||
|
DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $oldVal, $key);
|
||||||
|
sleep(1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
CLISetup::log("setting updated", CLISetup::LOG_OK);
|
CLISetup::log("setting updated", CLISetup::LOG_OK);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
break 3;
|
break 3;
|
||||||
@@ -304,8 +353,9 @@ function siteconfig()
|
|||||||
$val = trim(explode('default:', $info[0])[1]);
|
$val = trim(explode('default:', $info[0])[1]);
|
||||||
if (!($conf['flags'] & CON_FLAG_TYPE_STRING))
|
if (!($conf['flags'] & CON_FLAG_TYPE_STRING))
|
||||||
$val = @eval('return ('.$val.');');
|
$val = @eval('return ('.$val.');');
|
||||||
if (DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $val, strtolower($conf['key'])))
|
if (DB::Aowow()->query('UPDATE ?_config SET `value` = ? WHERE `key` = ?', $val, $key))
|
||||||
{
|
{
|
||||||
|
$onChange($key, $val);
|
||||||
CLISetup::log("default value restored", CLISetup::LOG_OK);
|
CLISetup::log("default value restored", CLISetup::LOG_OK);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
@@ -314,7 +364,7 @@ function siteconfig()
|
|||||||
if ($conf['flags'] & CON_FLAG_PERSISTENT)
|
if ($conf['flags'] & CON_FLAG_PERSISTENT)
|
||||||
continue 2;
|
continue 2;
|
||||||
|
|
||||||
if (DB::Aowow()->query('DELETE FROM ?_config WHERE `key` = ? AND (`flags` & ?d) = 0', strtolower($conf['key']), CON_FLAG_PERSISTENT))
|
if (DB::Aowow()->query('DELETE FROM ?_config WHERE `key` = ? AND (`flags` & ?d) = 0', $key, CON_FLAG_PERSISTENT))
|
||||||
{
|
{
|
||||||
CLISetup::log("php setting deleted ['".$conf['key']."': '".$conf['value']."']", CLISetup::LOG_OK);
|
CLISetup::log("php setting deleted ['".$conf['key']."': '".$conf['value']."']", CLISetup::LOG_OK);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
@@ -325,7 +375,7 @@ function siteconfig()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
CLISetup::log("edit canceled! returning to list...", CLISetup::LOG_INFO);
|
CLISetup::log('edit canceled! returning to list...', CLISetup::LOG_INFO);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -334,16 +384,35 @@ function siteconfig()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
CLISetup::log("invalid selection", CLISetup::LOG_ERROR);
|
CLISetup::log('invalid selection', CLISetup::LOG_ERROR);
|
||||||
sleep(1);
|
sleep(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
CLISetup::log("site configuration aborted", CLISetup::LOG_INFO);
|
CLISetup::log('site configuration aborted', CLISetup::LOG_INFO);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// propagate changes to static files
|
||||||
|
if ($updScripts && (!class_exists('FileGen') || FileGen::getMode() != FileGen::MODE_FIRSTRUN))
|
||||||
|
{
|
||||||
|
require_once 'setup/tools/clisetup/build.func.php';
|
||||||
|
CLISetup::log();
|
||||||
|
CLISetup::log('regenerating affected static content', CLISetup::LOG_INFO);
|
||||||
|
CLISetup::log();
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
if ($_ = array_diff($updScripts, build($updScripts)))
|
||||||
|
{
|
||||||
|
CLISetup::log(' - the following updates returned with errors, please recheck those - '.implode(', ', $_), CLISetup::LOG_ERROR);
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
$updScripts = [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ if (!CLI)
|
|||||||
|
|
||||||
class FileGen
|
class FileGen
|
||||||
{
|
{
|
||||||
const MODE_NORMAL = 0;
|
const MODE_NORMAL = 1;
|
||||||
const MODE_FIRSTRUN = 1;
|
const MODE_FIRSTRUN = 2;
|
||||||
const MODE_UPDATE = 2;
|
const MODE_UPDATE = 3;
|
||||||
|
|
||||||
public static $tplPath = 'setup/tools/filegen/templates/';
|
public static $tplPath = 'setup/tools/filegen/templates/';
|
||||||
|
|
||||||
@@ -23,6 +23,7 @@ class FileGen
|
|||||||
'icons', 'glyphs', 'pagetexts', 'loadingscreens', // whole images
|
'icons', 'glyphs', 'pagetexts', 'loadingscreens', // whole images
|
||||||
'artwork', 'talentbgs', 'maps', 'spawn-maps', 'area-maps' // images from image parts
|
'artwork', 'talentbgs', 'maps', 'spawn-maps', 'area-maps' // images from image parts
|
||||||
);
|
);
|
||||||
|
private static $mode = 0;
|
||||||
|
|
||||||
public static $subScripts = [];
|
public static $subScripts = [];
|
||||||
public static $tplFiles = array(
|
public static $tplFiles = array(
|
||||||
@@ -107,6 +108,8 @@ class FileGen
|
|||||||
|
|
||||||
CLISetup::log('created '.$pathOk.' extra paths'.($pathOk == count(self::$reqDirs) ? '' : ' with errors'));
|
CLISetup::log('created '.$pathOk.' extra paths'.($pathOk == count(self::$reqDirs) ? '' : ' with errors'));
|
||||||
CLISetup::log();
|
CLISetup::log();
|
||||||
|
|
||||||
|
self::$mode = $mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function handleCLIOpts(&$doScripts)
|
private static function handleCLIOpts(&$doScripts)
|
||||||
@@ -271,6 +274,10 @@ class FileGen
|
|||||||
return $success;
|
return $success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getMode()
|
||||||
|
{
|
||||||
|
return self::$mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ if (!CLI)
|
|||||||
|
|
||||||
class SqlGen
|
class SqlGen
|
||||||
{
|
{
|
||||||
const MODE_NORMAL = 0;
|
const MODE_NORMAL = 1;
|
||||||
const MODE_FIRSTRUN = 1;
|
const MODE_FIRSTRUN = 2;
|
||||||
const MODE_UPDATE = 2;
|
const MODE_UPDATE = 3;
|
||||||
|
|
||||||
private static $tables = array( // [dbcName, saveDbc, AowowDeps, TCDeps]
|
private static $tables = array( // [dbcName, saveDbc, AowowDeps, TCDeps]
|
||||||
'achievementcategory' => ['achievement_category', false, null, null],
|
'achievementcategory' => ['achievement_category', false, null, null],
|
||||||
@@ -78,6 +78,7 @@ class SqlGen
|
|||||||
public static $cliOpts = [];
|
public static $cliOpts = [];
|
||||||
private static $shortOpts = 'h';
|
private static $shortOpts = 'h';
|
||||||
private static $longOpts = ['sql::', 'help', 'sync:']; // general
|
private static $longOpts = ['sql::', 'help', 'sync:']; // general
|
||||||
|
private static $mode = 0;
|
||||||
|
|
||||||
public static $subScripts = [];
|
public static $subScripts = [];
|
||||||
|
|
||||||
@@ -109,6 +110,8 @@ class SqlGen
|
|||||||
CLISetup::log('No valid locale specified. Check your config or --locales parameter, if used', CLISetup::LOG_ERROR);
|
CLISetup::log('No valid locale specified. Check your config or --locales parameter, if used', CLISetup::LOG_ERROR);
|
||||||
exit;
|
exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self::$mode = $mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function handleCLIOpts(&$doTbls)
|
private static function handleCLIOpts(&$doTbls)
|
||||||
@@ -201,6 +204,11 @@ class SqlGen
|
|||||||
CLISetup::log(sprintf(ERR_MISSING_INCL, $tableName, 'setup/tools/sqlgen/'.$tableName.'.func.php'), CLISetup::LOG_ERROR);
|
CLISetup::log(sprintf(ERR_MISSING_INCL, $tableName, 'setup/tools/sqlgen/'.$tableName.'.func.php'), CLISetup::LOG_ERROR);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function getMode()
|
||||||
|
{
|
||||||
|
return self::$mode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user