function returnBike($number, $bike, $stand, $message = "", $force = FALSE) { global $db; $userId = getUser($number); $bikeNum = intval($bike); $stand = strtoupper($stand); $result = $db->query("SELECT standId FROM stands WHERE standName='{$stand}'"); if (!$result->num_rows) { sendSMS($number, _('Stand name') . " '" . $stand . "' " . _('does not exist. Stands are marked by CAPITALLETTERS.')); return; } $row = $result->fetch_assoc(); $standId = $row["standId"]; if ($force == FALSE) { $result = $db->query("SELECT bikeNum FROM bikes WHERE currentUser={$userId} ORDER BY bikeNum"); $bikenumber = $result->num_rows; if ($bikenumber == 0) { sendSMS($number, _('You have no rented bikes currently.')); return; } $listBikes = ""; while ($row = $result->fetch_assoc()) { $listBikes .= $row["bikeNum"] . ","; } if ($bikenumber > 1) { $listBikes = substr($listBikes, 0, strlen($listBikes) - 1); } } if ($force == FALSE) { $result = $db->query("SELECT currentCode FROM bikes WHERE currentUser={$userId} AND bikeNum={$bikeNum}"); if ($result->num_rows != 1) { sendSMS($number, _('You does not have bike') . " " . $bikeNum . " rented. " . _('You have rented the following') . " " . sprintf(ngettext('%d bike', '%d bikes', $bikenumber), $bikenumber) . ": {$listBikes}"); return; } $row = $result->fetch_assoc(); $currentCode = sprintf("%04d", $row["currentCode"]); $result = $db->query("SELECT note FROM notes WHERE bikeNum={$bikeNum} AND deleted IS NULL ORDER BY time DESC LIMIT 1"); $row = $result->fetch_assoc(); $note = $row["note"]; } else { $result = $db->query("SELECT currentCode,currentUser FROM bikes WHERE bikeNum={$bikeNum}"); if ($result->num_rows != 1) { sendSMS($number, _('Bike') . " " . $bikeNum . " " . _('is not rented. Saint Thomas, the patronus of all unrented bikes, prohibited returning unrented bikes.')); return; } $row = $result->fetch_assoc(); $currentCode = sprintf("%04d", $row["currentCode"]); $currentUser = $row["currentUser"]; $result = $db->query("SELECT note FROM notes WHERE bikeNum={$bikeNum} AND deleted IS NULL ORDER BY time DESC LIMIT 1"); $row = $result->fetch_assoc(); $note = $row["note"]; if ($currentUser) { $result = $db->query("SELECT number FROM users WHERE userId={$currentUser}"); $row = $result->fetch_assoc(); $currentUserNumber = $row["number"]; } } if (!preg_match("/return[\\s,\\.]+[0-9]+[\\s,\\.]+[a-zA-Z0-9]+[\\s,\\.]+(.*)/i", $message, $matches)) { $userNote = ""; } else { $userNote = $db->conn->real_escape_string(trim($matches[1])); } $result = $db->query("UPDATE bikes SET currentUser=NULL,currentStand={$standId} WHERE bikeNum={$bikeNum}"); if ($userNote) { $db->query("INSERT INTO notes SET bikeNum={$bikeNum},userId={$userId},note='{$userNote}'"); $result = $db->query("SELECT userName,number FROM users WHERE userId='{$userId}'"); $row = $result->fetch_assoc(); $userName = $row["userName"]; $phone = $row["number"]; $result = $db->query("SELECT stands.standName FROM bikes LEFT JOIN users ON bikes.currentUser=users.userID LEFT JOIN stands ON bikes.currentStand=stands.standId WHERE bikeNum={$bikeNum}"); $row = $result->fetch_assoc(); $standName = $row["standName"]; if ($standName != NULL) { $bikeStatus = _('at') . " " . $standName; } else { $bikeStatus = _('used by') . " " . $userName . " +" . $phone; } notifyAdmins(_('Note') . " b.{$bikeNum} (" . $bikeStatus . ") " . _('by') . " {$userName}/{$phone}:" . $userNote); } $message = _('Bike') . " " . $bikeNum . " " . _('returned to stand') . " " . $stand . ". " . _('Make sure you set code to') . " " . $currentCode . "."; if ($note or $userNote) { $tempnote = $note; if ($userNote) { $tempnote = $userNote; } if ($tempnote) { $message .= "(note:" . $tempnote . ")"; } } $message .= " " . _('Rotate lockpad to 0000.'); if ($force == FALSE) { $creditchange = changecreditendrental($bikeNum, $userId); $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='RETURN',parameter={$standId}"); } else { $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='FORCERETURN',parameter={$standId}"); if ($currentUserNumber) { sendSMS($currentUserNumber, _('System override') . ": " . _('Your rented bike') . " " . $bikeNum . " " . _('has been returned by admin') . "."); } } if (iscreditenabled()) { $message .= _('Credit') . ": " . getusercredit($userId) . getcreditcurrency(); if ($creditchange) { $message .= " (-" . $creditchange . ")"; } $message .= "."; } sendSMS($number, $message); }
function returnbike($userId, $stand) { global $db, $connectors; $stand = strtoupper($stand); $result = $db->query("SELECT bikeNum FROM bikes WHERE currentUser={$userId} ORDER BY bikeNum"); $bikenumber = $result->num_rows; if ($bikenumber == 0) { response(_('You have no rented bikes currently.'), ERROR); } elseif ($bikenumber > 1) { $message = _('You have') . ' ' . $bikenumber . ' ' . _('rented bikes currently. QR code return can be used only when 1 bike is rented. Please, use web'); if ($connectors["sms"]) { $message .= _(' or SMS'); } $message .= _(' to return the bikes.'); response($message, ERROR); } else { $result = $db->query("SELECT bikeNum,currentCode FROM bikes WHERE currentUser={$userId}"); $row = $result->fetch_assoc(); $currentCode = sprintf("%04d", $row["currentCode"]); $bikeNum = $row["bikeNum"]; $result = $db->query("SELECT standId FROM stands where standName='{$stand}'"); $row = $result->fetch_assoc(); $standId = $row["standId"]; $result = $db->query("UPDATE bikes SET currentUser=NULL,currentStand={$standId} WHERE bikeNum={$bikeNum} and currentUser={$userId}"); $message = '<h3>' . _('Bike') . ' ' . $bikeNum . ': <span class="label label-primary">' . _('Lock with code') . ' ' . $currentCode . '.</span></h3>'; $message .= '<br />' . _('Please') . ', <strong>' . _('rotate the lockpad to') . ' <span class="label label-default">0000</span></strong> ' . _('when leaving') . '.'; $creditchange = changecreditendrental($bikeNum, $userId); if (iscreditenabled() and $creditchange) { $message .= '<br />' . _('Credit change') . ': -' . $creditchange . getcreditcurrency() . '.'; } $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='RETURN',parameter={$standId}"); response($message); } }
function returnBike($userId, $bike, $stand, $note = "", $force = FALSE) { global $db; $bikeNum = intval($bike); $stand = strtoupper($stand); if ($force == FALSE) { $result = $db->query("SELECT bikeNum FROM bikes WHERE currentUser={$userId} ORDER BY bikeNum"); $bikenumber = $result->num_rows; if ($bikenumber == 0) { response(_('You currently have no rented bikes.'), ERROR); } } if ($force == FALSE) { $result = $db->query("SELECT currentCode FROM bikes WHERE currentUser={$userId} and bikeNum={$bikeNum}"); } else { $result = $db->query("SELECT currentCode FROM bikes WHERE bikeNum={$bikeNum}"); } $row = $result->fetch_assoc(); $currentCode = sprintf("%04d", $row["currentCode"]); $result = $db->query("SELECT standId FROM stands WHERE standName='{$stand}'"); $row = $result->fetch_assoc(); $standId = $row["standId"]; $result = $db->query("UPDATE bikes SET currentUser=NULL,currentStand={$standId} WHERE bikeNum={$bikeNum} and currentUser={$userId}"); if ($note) { addNote($userId, $bikeNum, $note); } $message = '<h3>' . _('Bike') . ' ' . $bikeNum . ': <span class="label label-primary">' . _('Lock with code') . ' ' . $currentCode . '.</span></h3>'; $message .= '<br />' . _('Please') . ', <strong>' . _('rotate the lockpad to') . ' <span class="label label-default">0000</span></strong> ' . _('when leaving') . '.'; if ($note) { $message .= '<br />' . _('You have also reported this problem:') . ' ' . $note . '.'; } if ($force == FALSE) { $creditchange = changecreditendrental($bikeNum, $userId); if (iscreditenabled() and $creditchange) { $message .= '<br />' . _('Credit change') . ': -' . $creditchange . getcreditcurrency() . '.'; } $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='RETURN',parameter={$standId}"); } else { $result = $db->query("INSERT INTO history SET userId={$userId},bikeNum={$bikeNum},action='FORCERETURN',parameter={$standId}"); } response($message); }