} } } return ArrestDB::Reply($result); }); ArrestDB::Serve('PUT', '/(#any)/(#num)', function ($table, $id) { if (empty($GLOBALS['_PUT']) === true) { $result = ArrestDB::$HTTP[204]; } else { if (is_array($GLOBALS['_PUT']) === true) { $data = []; foreach ($GLOBALS['_PUT'] as $key => $value) { $data[$key] = sprintf('"%s" = ?', $key); } $query = array(sprintf('UPDATE "%s" SET %s WHERE "%s" = ?', $table, implode(', ', $data), 'id')); $query = sprintf('%s;', implode(' ', $query)); $result = ArrestDB::Query($query, $GLOBALS['_PUT'], $id); if ($result === false) { $result = ArrestDB::$HTTP[409]; } else { $result = ArrestDB::$HTTP[200]; } } } return ArrestDB::Reply($result); }); exit(ArrestDB::Reply(ArrestDB::$HTTP[400])); class ArrestDB { public static $HTTP = [200 => ['success' => ['code' => 200, 'status' => 'OK']], 201 => ['success' => ['code' => 201, 'status' => 'Created']], 204 => ['error' => ['code' => 204, 'status' => 'No Content']], 400 => ['error' => ['code' => 400, 'status' => 'Bad Request']], 403 => ['error' => ['code' => 403, 'status' => 'Forbidden']], 404 => ['error' => ['code' => 404, 'status' => 'Not Found']], 409 => ['error' => ['code' => 409, 'status' => 'Conflict']], 503 => ['error' => ['code' => 503, 'status' => 'Service Unavailable']]]; public static function Query($query = null)
} if ($rowCount != $result['result']->rowCount()) { syslog(LOG_ERR, sprintf('Archived unloaded %d rows but delete removed %d rows - rolling back.', $rowCount, $result['result']->rowCount())); $result = ArrestDB::Query('ROLLBACK'); if ($result === false) { http_response_code(400); exit('Unable to ROLLBACK transaction!! Oh noes...'); } } $result = ArrestDB::Query('COMMIT'); if ($result === false) { http_response_code(400); exit('Unable to COMMIT transaction'); } } catch (Exception $e) { $result = ArrestDB::Query('ROLLBACK'); if ($result === false) { http_response_code(400); exit('Unable to ROLLBACK transaction!! Oh noes...'); } } http_response_code(201); header(sprintf('Location: %s/%s', $ARCHIVE_URI_PREFIX, basename($archive))); return ArrestDB::Reply(['count' => $rowCount]); }); ArrestDB::Serve('DELETE', '/(#any)', function () { http_response_code(400); exit('Not yet implemented'); }); http_response_code(400); exit('Request failed to match');
ArrestDB::Serve('PUT', '/(#any)/(#num)', function ($table, $id) { if (function_exists("ArrestDB_auth") && !ArrestDB_auth("PUT", $table, $id)) { exit(ArrestDB::Reply(ArrestDB::$HTTP[403])); } if (preg_match("/(?P<table>[^\\(]+)\\((?P<id>[^\\)]+)\\)/", $table, $matches)) { $table = $matches["table"]; $id = $matches["id"]; } if (function_exists("ArrestDB_obfuscate_id")) { if ($id != null && $id != "") { $id = ArrestDB_obfuscate_id($table, $id, true); } } if (function_exists("ArrestDB_allow")) { if (!ArrestDB_allow("PUT", $table, $id)) { $result = ArrestDB::$HTTP[403]; return ArrestDB::Reply($result); } } if (function_exists("ArrestDB_tableAlias")) { $table = ArrestDB_tableAlias($table); } if (empty($GLOBALS['_PUT']) === true) { $result = ArrestDB::$HTTP[204]; } else { if (is_array($GLOBALS['_PUT']) === true) { $query = []; $query["TABLE"] = $table; $query["VALUES"] = []; foreach ($GLOBALS["_PUT"] as $key => $value) { $query["VALUES"][$key] = $value; } if (function_exists("ArrestDB_modify_query")) { $query = ArrestDB_modify_query("PUT", $table, $id, $query); } $data = []; foreach ($query['VALUES'] as $key => $value) { $data[$key] = sprintf('"%s" = ?', $key); } $query2 = array(sprintf('UPDATE "%s" SET %s WHERE "%s" = ?', $query["TABLE"], implode(', ', $data), ArrestDB::TableKeyName($query["TABLE"]))); $query2 = sprintf('%s;', implode(' ', $query2)); $result = ArrestDB::Query($query2, $query['VALUES'], $id); if ($result === false) { $result = ArrestDB::$HTTP[409]; } else { $result = ArrestDB::$HTTP[200]; if (function_exists(ArrestDB_postProcess)) { ArrestDB_postProcess("PUT", $table, $id); } } } } return ArrestDB::Reply($result); });
ArrestDB::Serve('POST', '/(#any)', function ($table) { if (empty($_POST) === true) { $result = ArrestDB::$HTTP[204]; } else { if (is_array($_POST) === true) { $queries = []; if (count($_POST) == count($_POST, COUNT_RECURSIVE)) { $_POST = [$_POST]; } foreach ($_POST as $row) { $data = []; foreach ($row as $key => $value) { $data[sprintf('"%s"', $key)] = $value; } $query = array(sprintf('INSERT INTO "%s" (%s) VALUES (%s)', $table, implode(', ', array_keys($data)), implode(', ', array_fill(0, count($data), '?')))); $queries[] = array(sprintf('%s;', implode(' ', $query)), $data); } if (count($queries) > 1) { ArrestDB::Query()->beginTransaction(); while (is_null($query = array_shift($queries)) !== true) { if (($result = ArrestDB::Query($query[0], $query[1])) === false) { ArrestDB::Query()->rollBack(); break; } } if ($result !== false && ArrestDB::Query()->inTransaction() === true) { $result = ArrestDB::Query()->commit(); } } else { if (is_null($query = array_shift($queries)) !== true) { $result = ArrestDB::Query($query[0], $query[1]); } } if ($result === false) { $result = ArrestDB::$HTTP[409]; } else { $result = ArrestDB::$HTTP[201]; } } } return ArrestDB::Reply($result); });