/**
 * global error-function
 *
 * @param $msg
 * @param $link
 * @param $linklabel
 * @param $msgs
 */
function error($msg, $link = "", $linklabel = "", $msgs = array())
{
    global $cfg, $argv;
    // web/cli/tfbf
    if (empty($argv[0]) && !("tfbf" == @substr($cfg['user_agent'], 0, 4))) {
        // web
        // theme
        $theme = CheckandSetUserTheme();
        // template
        require_once "themes/" . $theme . "/index.php";
        require_once "inc/lib/vlib/vlibTemplate.php";
        $_tmpl = tmplGetInstance($theme, "page.error.tmpl");
        // message
        $_tmpl->setvar('message', htmlentities($msg, ENT_QUOTES));
        // messages
        if (!empty($msgs)) {
            $msgAry = array_map("htmlentities", $msgs);
            $_tmpl->setvar('messages', implode("\n", $msgAry));
        }
        // link + linklabel
        if (!empty($link)) {
            $_tmpl->setvar('link', $link);
            $_tmpl->setvar('linklabel', !empty($linklabel) ? htmlentities($linklabel, ENT_QUOTES) : "Ok");
        }
        // parse template
        $_tmpl->pparse();
        // get out here
        exit;
    } else {
        // cli/tfbf
        // message
        $exitMsg = "Error: " . $msg . "\n";
        // messages
        if (!empty($msgs)) {
            $exitMsg .= implode("\n", $msgs) . "\n";
        }
        // get out here
        exit($exitMsg);
    }
}
    }
    // set transfers-cache
    cacheTransfersSet();
    // set session-settings
    $_SESSION['settings']['index_meta_refresh'] = $cfg["enable_index_meta_refresh"] != 0 ? 1 : 0;
    $_SESSION['settings']['index_ajax_update'] = $cfg["enable_index_ajax_update"] != 0 ? 1 : 0;
    $_SESSION['settings']['index_show_seeding'] = $cfg["index_show_seeding"] != 0 ? 1 : 0;
    // xfer
    if ($cfg['enable_xfer'] == 1) {
        // xfer-init
        Xfer::init();
    }
} else {
    // Check for valid theme
    if (isset($cfg["theme"])) {
        $cfg["theme"] = CheckandSetUserTheme();
    }
    // Run internal maintenance regularly
    if (!empty($_SESSION['next_int_maintenance']) && $_SESSION['next_int_maintenance'] < time()) {
        require_once "inc/classes/MaintenanceAndRepair.php";
        MaintenanceAndRepair::maintenance(MAINTENANCEANDREPAIR_TYPE_INT);
        $_SESSION['next_int_maintenance'] = null;
    }
}
// schedule next internal maintenance if needed
if (empty($_SESSION['next_int_maintenance'])) {
    $_SESSION['next_int_maintenance'] = time() + 2 * 3600 + mt_rand(-1200, 1200);
}
// 2h (+/- 20m)
// free space in MB var
$cfg["free_space"] = @disk_free_space($cfg["path"]) / 1048576;