'']); if ($cl == 'remoteprofile' || $cl == 'localprofile') $cl = 'profile'; if ($cl == 'remotearenateam' || $cl == 'localarenateam') $cl = 'arenateam'; if ($cl == 'remoteguild' || $cl == 'localguild') $cl = 'guild'; if (file_exists('includes/types/'.$cl.'.class.php')) require_once 'includes/types/'.$cl.'.class.php'; else throw new Exception('could not register type class: '.$cl); return; } else if (stripos($class, 'ajax') === 0) { require_once 'includes/ajaxHandler.class.php'; // handles ajax and jsonp requests if (file_exists('includes/ajaxHandler/'.strtr($class, ['ajax' => '']).'.class.php')) require_once 'includes/ajaxHandler/'.strtr($class, ['ajax' => '']).'.class.php'; else throw new Exception('could not register ajaxHandler class: '.$class); return; } else if (file_exists('pages/'.strtr($class, ['page' => '']).'.php')) require_once 'pages/'.strtr($class, ['page' => '']).'.php'; }); // Setup DB-Wrapper if (!empty($AoWoWconf['aowow']['db'])) DB::load(DB_AOWOW, $AoWoWconf['aowow']); if (!empty($AoWoWconf['world']['db'])) DB::load(DB_WORLD, $AoWoWconf['world']); if (!empty($AoWoWconf['auth']['db'])) DB::load(DB_AUTH, $AoWoWconf['auth']); if (!empty($AoWoWconf['characters'])) foreach ($AoWoWconf['characters'] as $realm => $charDBInfo) if (!empty($charDBInfo)) DB::load(DB_CHARACTERS . $realm, $charDBInfo); // load config to constants $sets = DB::isConnectable(DB_AOWOW) ? DB::Aowow()->select('SELECT `key` AS ARRAY_KEY, `value`, `flags` FROM ?_config') : []; foreach ($sets as $k => $v) { $php = $v['flags'] & CON_FLAG_PHP; // this should not have been possible if (!strlen($v['value']) && !($v['flags'] & CON_FLAG_TYPE_STRING) && !$php) { trigger_error('Aowow config value CFG_'.strtoupper($k).' is empty - config will not be used!', E_USER_ERROR); continue; } if ($v['flags'] & CON_FLAG_TYPE_INT) $val = intVal($v['value']); else if ($v['flags'] & CON_FLAG_TYPE_FLOAT) $val = floatVal($v['value']); else if ($v['flags'] & CON_FLAG_TYPE_BOOL) $val = (bool)$v['value']; else if ($v['flags'] & CON_FLAG_TYPE_STRING) $val = preg_replace("/[\p{C}]/ui", '', $v['value']); else if ($php) { trigger_error('PHP config value '.strtolower($k).' has no type set - config will not be used!', E_USER_ERROR); continue; } else // if (!$php) { trigger_error('Aowow config value CFG_'.strtoupper($k).' has no type set - value forced to 0!', E_USER_ERROR); $val = 0; } if ($php) ini_set(strtolower($k), $val); else define('CFG_'.strtoupper($k), $val); } // handle non-fatal errors and notices error_reporting(!empty($AoWoWconf['aowow']) && CFG_DEBUG ? E_AOWOW : 0); set_error_handler(function($errNo, $errStr, $errFile, $errLine) { $errName = 'unknown error'; // errors not in this list can not be handled by set_error_handler (as per documentation) or are ignored $uGroup = U_GROUP_EMPLOYEE; if ($errNo == E_WARNING) // 0x0002 $errName = 'E_WARNING'; else if ($errNo == E_PARSE) // 0x0004 $errName = 'E_PARSE'; else if ($errNo == E_NOTICE) // 0x0008 $errName = 'E_NOTICE'; else if ($errNo == E_USER_ERROR) // 0x0100 $errName = 'E_USER_ERROR'; else if ($errNo == E_USER_WARNING) // 0x0200 $errName = 'E_USER_WARNING'; else if ($errNo == E_USER_NOTICE) // 0x0400 { $errName = 'E_USER_NOTICE'; $uGroup = U_GROUP_STAFF; } else if ($errNo == E_RECOVERABLE_ERROR) // 0x1000 $errName = 'E_RECOVERABLE_ERROR'; Util::addNote($uGroup, $errName.' - '.$errStr.' @ '.$errFile. ':'.$errLine); if (DB::isConnectable(DB_AOWOW)) DB::Aowow()->query('INSERT INTO ?_errors (`date`, `version`, `phpError`, `file`, `line`, `query`, `userGroups`, `message`) VALUES (UNIX_TIMESTAMP(), ?d, ?d, ?, ?d, ?, ?d, ?) ON DUPLICATE KEY UPDATE `date` = UNIX_TIMESTAMP()', AOWOW_REVISION, $errNo, $errFile, $errLine, CLI ? 'CLI' : $_SERVER['QUERY_STRING'], User::$groups, $errStr ); return true; }, E_AOWOW); // handle exceptions set_exception_handler(function ($ex) { Util::addNote(U_GROUP_EMPLOYEE, 'Exception - '.$ex->getMessage().' @ '.$ex->getFile(). ':'.$ex->getLine()."\n".$ex->getTraceAsString()); if (DB::isConnectable(DB_AOWOW)) DB::Aowow()->query('INSERT INTO ?_errors (`date`, `version`, `phpError`, `file`, `line`, `query`, `userGroups`, `message`) VALUES (UNIX_TIMESTAMP(), ?d, ?d, ?, ?d, ?, ?d, ?) ON DUPLICATE KEY UPDATE `date` = UNIX_TIMESTAMP()', AOWOW_REVISION, $ex->getCode(), $ex->getFile(), $ex->getLine(), CLI ? 'CLI' : $_SERVER['QUERY_STRING'], User::$groups, $ex->getMessage() ); if (!CLI) (new GenericPage(null))->error(); else echo 'Exception - '.$ex->getMessage()."\n ".$ex->getFile(). '('.$ex->getLine().")\n".$ex->getTraceAsString()."\n"; }); // handle fatal errors register_shutdown_function(function() { if (($e = error_get_last()) && $e['type'] & (E_ERROR | E_COMPILE_ERROR | E_CORE_ERROR)) { Util::addNote(U_GROUP_EMPLOYEE, 'Fatal Error - '.$e['message'].' @ '.$e['file']. ':'.$e['line']); if (DB::isConnectable(DB_AOWOW)) DB::Aowow()->query('INSERT INTO ?_errors (`date`, `version`, `phpError`, `file`, `line`, `query`, `userGroups`, `message`) VALUES (UNIX_TIMESTAMP(), ?d, ?d, ?, ?d, ?, ?d, ?) ON DUPLICATE KEY UPDATE `date` = UNIX_TIMESTAMP()', AOWOW_REVISION, $e['type'], $e['file'], $e['line'], CLI ? 'CLI' : $_SERVER['QUERY_STRING'], User::$groups, $e['message'] ); if (CLI) echo 'Fatal Error - '.$e['message'].' @ '.$e['file']. ':'.$e['line']."\n"; // cant generate a page for web view :( die(); } }); $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || (!empty($AoWoWconf['aowow']) && CFG_FORCE_SSL); if (defined('CFG_STATIC_HOST')) // points js to images & scripts define('STATIC_URL', ($secure ? 'https://' : 'http://').CFG_STATIC_HOST); if (defined('CFG_SITE_HOST')) // points js to executable files define('HOST_URL', ($secure ? 'https://' : 'http://').CFG_SITE_HOST); if (!CLI) { if (!defined('CFG_SITE_HOST') || !defined('CFG_STATIC_HOST')) die('error: SITE_HOST or STATIC_HOST not configured'); // Setup Session if (CFG_SESSION_CACHE_DIR && Util::writeDir(CFG_SESSION_CACHE_DIR)) session_save_path(getcwd().'/'.CFG_SESSION_CACHE_DIR); session_set_cookie_params(15 * YEAR, '/', '', $secure, true); session_cache_limiter('private'); session_start(); if (!empty($AoWoWconf['aowow']) && User::init()) User::save(); // save user-variables in session // hard-override locale for this call (should this be here..?) // all strings attached.. if (!empty($AoWoWconf['aowow'])) { if (isset($_GET['locale']) && (CFG_LOCALES & (1 << (int)$_GET['locale']))) User::useLocale($_GET['locale']); Lang::load(User::$localeString); } // parse page-parameters .. sanitize before use! $str = explode('&', $_SERVER['QUERY_STRING'], 2)[0]; $_ = explode('=', $str, 2); $pageCall = $_[0]; $pageParam = isset($_[1]) ? $_[1] : null; Util::$wowheadLink = 'http://'.Util::$subDomains[User::$localeId].'.wowhead.com/'.$str; } else if (!empty($AoWoWconf['aowow'])) Lang::load('enus'); $AoWoWconf = null; // empty auths ?>