function response($message, $error = 0, $log = 1)
{
    global $db, $systemname, $systemURL;
    if ($log == 1 and $message) {
        if (isset($_COOKIE["loguserid"])) {
            $userid = $db->conn->real_escape_string(trim($_COOKIE["loguserid"]));
        } else {
            $userid = 0;
        }
        $number = getphonenumber($userid);
        logresult($number, $message);
    }
    $db->conn->commit();
    echo '<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>', $systemname, '</title>';
    echo '<base href="', $systemURL, '" />';
    echo '<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />';
    echo '<link rel="stylesheet" type="text/css" href="css/bootstrap-theme.min.css" />';
    if (file_exists("analytics.php")) {
        require "analytics.php";
    }
    echo '</head><body><div class="container">';
    if ($error) {
        echo '<div class="alert alert-danger" role="alert">', $message, '</div>';
    } else {
        echo '<div class="alert alert-success" role="alert">', $message, '</div>';
    }
    echo '</div></body></html>';
    exit;
}
function revert($number, $bikeNum)
{
    global $db;
    $userId = getUser($number);
    $result = $db->query("SELECT currentUser FROM bikes WHERE bikeNum={$bikeNum} AND currentUser<>'NULL'");
    if (!$result->num_rows) {
        sendSMS($number, _('Bike') . " " . $bikeNum . " " . _('is not rented right now. Revert not successful!'));
        return;
    } else {
        $row = $result->fetch_assoc();
        $revertusernumber = getphonenumber($row["currentUser"]);
    }
    $result = $db->query("SELECT parameter,standName FROM stands LEFT JOIN history ON stands.standId=parameter WHERE bikeNum={$bikeNum} AND action IN ('RETURN','FORCERETURN') ORDER BY time DESC LIMIT 1");
    if ($result->num_rows == 1) {
        $row = $result->fetch_assoc();
        $standId = $row["parameter"];
        $stand = $row["standName"];
    }
    $result = $db->query("SELECT parameter FROM history WHERE bikeNum={$bikeNum} AND action IN ('RENT','FORCERENT') ORDER BY time DESC LIMIT 1,1");
    if ($result->num_rows == 1) {
        $row = $result->fetch_assoc();
        $code = $row["parameter"];
    }
    if ($standId and $code) {
        $result = $db->query("UPDATE bikes SET currentUser=NULL,currentStand={$standId},currentCode={$code} WHERE bikeNum={$bikeNum}");
        $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='REVERT',parameter='{$standId}|{$code}'");
        $result = $db->query("INSERT INTO history SET userId=0,bikeNum={$bikeNum},action='RENT',parameter={$code}");
        $result = $db->query("INSERT INTO history SET userId=0,bikeNum={$bikeNum},action='RETURN',parameter={$standId}");
        sendSMS($number, _('Bike') . " " . $bikeNum . " " . _('reverted to stand') . " " . $stand . " " . _('with code') . " " . $code . ".");
        sendSMS($revertusernumber, _('Bike') . " " . $bikeNum . " " . _('has been returned. You can now rent a new bicycle.'));
    } else {
        sendSMS($number, _('No last code for bicycle') . " " . $bikeNum . " " . _('found. Revert not successful!'));
    }
}
function revert($userId, $bikeNum)
{
    global $db;
    $standId = 0;
    $result = $db->query("SELECT currentUser FROM bikes WHERE bikeNum={$bikeNum} AND currentUser IS NOT NULL");
    if (!$result->num_rows) {
        response(_('Bicycle') . " " . $bikeNum . " " . _('is not rented right now. Revert not successful!'), ERROR);
        return;
    } else {
        $row = $result->fetch_assoc();
        $revertusernumber = getphonenumber($row["currentUser"]);
    }
    $result = $db->query("SELECT parameter,standName FROM stands LEFT JOIN history ON stands.standId=parameter WHERE bikeNum={$bikeNum} AND action IN ('RETURN','FORCERETURN') ORDER BY time DESC LIMIT 1");
    if ($result->num_rows == 1) {
        $row = $result->fetch_assoc();
        $standId = $row["parameter"];
        $stand = $row["standName"];
    }
    $result = $db->query("SELECT parameter FROM history WHERE bikeNum={$bikeNum} AND action IN ('RENT','FORCERENT') ORDER BY time DESC LIMIT 1,1");
    if ($result->num_rows == 1) {
        $row = $result->fetch_assoc();
        $code = str_pad($row["parameter"], 4, "0", STR_PAD_LEFT);
    }
    if ($standId and $code) {
        $result = $db->query("UPDATE bikes SET currentUser=NULL,currentStand={$standId},currentCode={$code} WHERE bikeNum={$bikeNum}");
        $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='REVERT',parameter='{$standId}|{$code}'");
        $result = $db->query("INSERT INTO history SET userId=0,bikeNum={$bikeNum},action='RENT',parameter={$code}");
        $result = $db->query("INSERT INTO history SET userId=0,bikeNum={$bikeNum},action='RETURN',parameter={$standId}");
        response('<h3>' . _('Bicycle') . ' ' . $bikeNum . ' ' . _('reverted to') . ' <span class="label label-primary">' . $stand . '</span> ' . _('with code') . ' <span class="label label-primary">' . $code . '</span>.</h3>');
        sendSMS($revertusernumber, _('Bike') . " " . $bikeNum . " " . _('has been returned. You can now rent a new bicycle.'));
    } else {
        response(_('No last stand or code for bicycle') . " " . $bikeNum . " " . _('found. Revert not successful!'), ERROR);
    }
}
function logrequest($userid)
{
    global $dbserver, $dbuser, $dbpassword, $dbname;
    $localdb = new Database($dbserver, $dbuser, $dbpassword, $dbname);
    $localdb->connect();
    $localdb->conn->autocommit(TRUE);
    $number = getphonenumber($userid);
    $result = $localdb->query("INSERT INTO received SET sender='{$number}',receive_time='" . date("Y-m-d H:i:s") . "',sms_text='" . $_SERVER['REQUEST_URI'] . "',ip='" . $_SERVER['REMOTE_ADDR'] . "'");
}
function logrequest($userid)
{
    R::selectDatabase('localdb');
    R::begin();
    $received = R::dispense('received');
    $received->sender = getphonenumber($userid);
    $received->receivetime = date("Y-m-d H:i:s");
    $received->smstext = $_SERVER['REQUEST_URI'];
    $received->ip = $_SERVER['REMOTE_ADDR'];
    R::store($received);
    R::commit();
    R::selectDatabase('default');
}