/**
  * accessor for singleton
  *
  * @return Fluxd
  */
 function getInstance()
 {
     global $instanceFluxd;
     // initialize if needed
     if (!isset($instanceFluxd)) {
         Fluxd::initialize();
     }
     return $instanceFluxd;
 }
if (@file_exists($cfg['bin_php']) !== true) {
    $failed++;
    $tmpl->setvar('phpMissing', 1);
}
// check for sockets
$loadedExtensions = get_loaded_extensions();
if (!in_array("sockets", $loadedExtensions)) {
    $failed++;
    $tmpl->setvar('socketsMissing', 1);
}
// set supported-var
$tmpl->setvar('fluxdSupported', $failed > 0 ? 0 : 1);
// fluxd core
if (Fluxd::isRunning()) {
    $tmpl->setvar('fluxdRunning', 1);
    $tmpl->setvar('fluxdPid', Fluxd::getPid());
} else {
    $tmpl->setvar('fluxdRunning', 0);
}
$tmpl->setvar('fluxd_dbmode', $cfg["fluxd_dbmode"]);
$tmpl->setvar('fluxd_loglevel', $cfg["fluxd_loglevel"]);
// Qmgr
FluxdServiceMod::initializeServiceMod('Qmgr');
// would not be needed as its done in main
$tmpl->setvar('fluxd_Qmgr_enabled', $cfg["fluxd_Qmgr_enabled"]);
$tmpl->setvar('fluxd_Qmgr_state', FluxdQmgr::getModState());
$tmpl->setvar('fluxd_Qmgr_interval', $cfg["fluxd_Qmgr_interval"]);
$tmpl->setvar('fluxd_Qmgr_maxTotalTransfers', $cfg["fluxd_Qmgr_maxTotalTransfers"]);
$tmpl->setvar('fluxd_Qmgr_maxUserTransfers', $cfg["fluxd_Qmgr_maxUserTransfers"]);
// Watch
FluxdServiceMod::initializeServiceMod('Watch');
/**
 * builds page
 *
 * @param $action
 */
function buildPage($action)
{
    global $cfg, $statusImage, $statusMessage, $htmlTitle, $htmlTop, $htmlMain;
    // navi
    $htmlTop .= '<a href="' . _FILE_THIS . '?t=0">Transfer Bulk-ops</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?p=0">Processes</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?m=0">Maintenance</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?b=0">Backup</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?l=0">Log</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?y=0">Misc</a>';
    $htmlTop .= ' | ';
    $htmlTop .= '<a href="' . _FILE_THIS . '?z=0">About</a>';
    // body
    switch ($action) {
        case "b":
            // backup passthru
        // backup passthru
        case "-b":
            // backup-error passthru
            if ($action == "b") {
                $statusImage = "yellow.gif";
            } else {
                $statusImage = "red.gif";
            }
            //
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?b=0">Create Backup</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?b=3">Backups currently on server</a>';
            $htmlMain .= '</td><td align="right" nowrap><strong>Backup</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "-u":
            // update-error passthru
            $statusImage = "red.gif";
            $htmlTitle = "Update";
            $htmlMain = '<br><font color="red"><strong>Update from your version not possible.</strong></font>';
            $htmlMain .= '<br><br>';
            $htmlMain .= 'Please use the most recent tarball and perform a manual update.';
            $htmlMain .= '<br>';
            break;
        case "t":
            // transfers passthru
            $statusImage = "black.gif";
            break;
        case "p":
            // processes passthru
            $statusImage = "black.gif";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?p=1">All</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?p=2">Transfers</a>';
            $htmlMain .= '</td><td align="right"><strong>Processes</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "m":
            // maintenance passthru
            $statusImage = "black.gif";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=1">Main</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=2">Kill</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=3">Clean</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=4">Repair</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=5">Reset</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=6">Lock</a>';
            $htmlMain .= '</td><td align="right"><strong>Maintenance</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "l":
            // log passthru
            $statusImage = "black.gif";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=1">fluxd</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=2">fluxd-error</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=3">fluazu</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=5">mainline</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=8">transfers</a>';
            $htmlMain .= '</td><td align="right"><strong>Log</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "y":
            // misc passthru
            $statusImage = "black.gif";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?y=1">Lists</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?y=3">Checksum Validation</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?y=5">Check Requirements</a>';
            $htmlMain .= '</td><td align="right" nowrap><strong>Misc</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "z":
            // about passthru
            $statusImage = "black.gif";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?z=1">Version</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?z=2">News</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?z=3">Changelog</a>';
            $htmlMain .= '</td><td align="right" nowrap><strong>About</strong></td>';
            $htmlMain .= '</tr></table>';
            break;
        case "f":
            // fluxd passthru
            $htmlTop = "";
            $statusImage = "";
            $htmlMain .= '<table width="100%" bgcolor="' . $cfg["table_data_bg"] . '" border="0" cellpadding="4" cellspacing="0"><tr><td width="100%">';
            $htmlMain .= '<a href="' . _FILE_THIS . '?f=1">log</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?f=2">error-log</a>';
            $htmlMain .= ' | ';
            $htmlMain .= '<a href="' . _FILE_THIS . '?f=3">ps</a>';
            if (Fluxd::isRunning()) {
                $htmlMain .= ' | ';
                $htmlMain .= '<a href="' . _FILE_THIS . '?f=4">status</a>';
            } else {
                $htmlMain .= ' | ';
                $htmlMain .= '<a href="' . _FILE_THIS . '?f=5">check</a>';
                $htmlMain .= ' | ';
                $htmlMain .= '<a href="' . _FILE_THIS . '?f=6">db-debug</a>';
                $htmlMain .= ' | ';
                $htmlMain .= '<a href="' . _FILE_THIS . '?f=9">version</a>';
            }
            $htmlMain .= '</td><td align="right"><strong>fluxd</strong>';
            $htmlMain .= '</tr></table>';
            break;
        case "_":
            // default
        // default
        default:
            $htmlTitle = "SuperAdmin";
            $statusImage = "black.gif";
            $htmlMain = '<br><div align="left">';
            $htmlMain .= '<p>Select the superadmin task you wish to perform below:<br><br>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?t=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Transfer Bulk Ops" border="0"> Transfer Bulk Ops</a> - bulk start/stop/resume transfers';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?p=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Processes" border="0"> Processes</a> - view detailed process info; force stop transfer processes';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?m=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Maintenance" border="0"> Maintenance</a> - clean up and maintenance';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?b=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Backup" border="0"> Backup</a> - create backups; download saved backups';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?l=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Log" border="0"> Log</a> - view logs';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?y=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="Misc" border="0"> Misc</a> - test for PHP and Perl requirements; view list of installed files';
            $htmlMain .= '<p>';
            $htmlMain .= '<a href="' . _FILE_THIS . '?z=0"><img src="themes/' . $cfg["theme"] . '/images/arrow.gif" width="9" height="9" title="About" border="0"> About</a> - version checking, updates, news, changelog; check installed file integrity';
            $htmlMain .= '</div><br><br>';
            break;
    }
}
 /**
  * instance_dequeue
  *
  * @param $transfer
  * @param $user
  */
 function instance_dequeueTransfer($transfer, $user)
 {
     global $cfg;
     if ($this->modstate == FLUXDMOD_STATE_RUNNING) {
         if (isTransferRunning($transfer)) {
             // transfer has been started...log
             AuditAction($cfg["constants"]["unqueued_transfer"], $transfer . "has been already started.");
         } else {
             // send command
             $result = Fluxd::sendServiceCommand($this->moduleName, 'dequeue;' . $transfer . ';' . $user, 1);
             // flag the transfer as stopped (in db)
             stopTransferSettings($transfer);
             // update the stat file.
             $this->_updateStatFile($transfer);
             // log
             AuditAction($cfg["constants"]["fluxd"], $result);
             // log
             AuditAction($cfg["constants"]["unqueued_transfer"], $transfer);
             // just 2 sec... dont stress fluxd
             sleep(2);
         }
     }
 }
        $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;
// drive space var
$cfg['driveSpace'] = getDriveSpace($cfg["path"]);
// free space formatted var
$cfg['freeSpaceFormatted'] = formatFreeSpace($cfg["free_space"]);
// Fluxd
Fluxd::initialize();
// Qmgr
FluxdServiceMod::initializeServiceMod('Qmgr');
// xfer
if ($cfg['enable_xfer'] == 1 && $cfg['xfer_realtime'] == 1) {
    // set xfer-newday
    Xfer::setNewday();
}
// vlib
require_once "inc/lib/vlib/vlibTemplate.php";
 /**
  * initialize the FluxdServiceMod.
  */
 function instance_initialize()
 {
     // modstate-init
     $this->modstate = Fluxd::modState($this->moduleName);
 }
/**
 * controlFluxd
 */
function admin_controlFluxd()
{
    global $cfg;
    $message = "";
    $action = tfb_getRequestVar('a');
    switch ($action) {
        case "start":
            // start fluxd
            if (Fluxd::isReadyToStart()) {
                Fluxd::start();
                if (Fluxd::isRunning()) {
                    $message = 'fluxd started';
                } else {
                    $message = 'Error starting fluxd.';
                    $msgs = Fluxd::getMessages();
                    Fluxd::logError("Error starting fluxd." . (!empty($msgs) ? "\n" . implode("\n", $msgs) . "\n" : "\n"), true);
                    array_push($msgs, "please check fluxd-logs");
                    @error($message, "admin.php?op=fluxdSettings", "fluxd-Settings", $msgs);
                }
                break;
            }
            $message = 'fluxd not ready to start';
            break;
        case "stop":
            // kill fluxd
            if (Fluxd::isRunning()) {
                Fluxd::stop();
                $message = Fluxd::isRunning() ? 'Stop-Command sent.' : 'fluxd stopped.';
            }
            break;
        default:
            $message = 'Error : no control-operation.';
            break;
    }
    if ($message != "") {
        @header("Location: admin.php?op=fluxdSettings&m=" . urlencode($message));
    } else {
        @header("Location: admin.php?op=fluxdSettings");
    }
    exit;
}