From af13a709764f4a5c9d86a0b1f8602a4a9033f3b1 Mon Sep 17 00:00:00 2001 From: Skylar Ittner Date: Sat, 27 Apr 2019 00:35:22 -0600 Subject: [PATCH] User sign-in/account linking, profiles, barcode to items, database changes --- api/actions/broadcast.php | 15 ++++ api/actions/createplayer.php | 24 +++++++ api/actions/getprofile.php | 24 +++++++ api/actions/items.php | 27 +++++++ api/actions/nearby.php | 97 +++++++++++++++++++++++++ api/actions/playerexists.php | 18 +++++ api/actions/submitcode.php | 81 +++++++++++++++++++++ api/apisettings.php | 32 ++++++++- database.mwb | Bin 20381 -> 22468 bytes database.mwb.bak | Bin 0 -> 22460 bytes database/migrate_v1.sql | 136 +++++++++++++++++++++++++++++++++++ 11 files changed, 453 insertions(+), 1 deletion(-) create mode 100644 api/actions/broadcast.php create mode 100644 api/actions/createplayer.php create mode 100644 api/actions/getprofile.php create mode 100644 api/actions/items.php create mode 100644 api/actions/nearby.php create mode 100644 api/actions/playerexists.php create mode 100644 api/actions/submitcode.php create mode 100644 database.mwb.bak create mode 100644 database/migrate_v1.sql diff --git a/api/actions/broadcast.php b/api/actions/broadcast.php new file mode 100644 index 0000000..68801ac --- /dev/null +++ b/api/actions/broadcast.php @@ -0,0 +1,15 @@ +update("players", [ + "latitude" => $VARS["latitude"], + "longitude" => $VARS["longitude"], + "lastping" => date("Y-m-d H:i:s") + ], ["accountid" => getRequestUser()->getUID()]); + +sendJsonResp(); \ No newline at end of file diff --git a/api/actions/createplayer.php b/api/actions/createplayer.php new file mode 100644 index 0000000..e531147 --- /dev/null +++ b/api/actions/createplayer.php @@ -0,0 +1,24 @@ +has("players", ["accountid" => getRequestUser()->getUID()])) { + sendJsonResp($Strings->get("Your account is already active.", false), "ERROR"); +} + +$database->insert("players", [ + "accountid" => getRequestUser()->getUID(), + "level" => 1.0, + "energy" => 100, + "maxenergy" => 100, + "credits" => 500, + "lastping" => date("Y-m-d H:i:s"), + "teamid" => $VARS['team'], + "nickname" => getRequestUser()->getName(), +]); + +sendJsonResp(); \ No newline at end of file diff --git a/api/actions/getprofile.php b/api/actions/getprofile.php new file mode 100644 index 0000000..1bf697c --- /dev/null +++ b/api/actions/getprofile.php @@ -0,0 +1,24 @@ +getUID(); +} else { + $accountid = $VARS["id"]; +} + +if ($database->has("players", ["accountid" => $accountid])) { + $profile = $database->get("players", ["accountid (id)", "nickname (name)", "level", "energy", "maxenergy", "teamid"], ["accountid" => $accountid]); +} else { + sendJsonResp($Strings->get("Player does not exist.", false), "ERROR"); +} + +exitWithJson([ + "status" => "OK", + "profile" => $profile +]); diff --git a/api/actions/items.php b/api/actions/items.php new file mode 100644 index 0000000..0bdab1e --- /dev/null +++ b/api/actions/items.php @@ -0,0 +1,27 @@ +select( + 'items', [ + '[>]inventory' => ['itemid' => 'itemid'], + '[>]itemclasses' => ['classid', 'classid'] + ], [ + 'inventory.itemuuid (uuid)', + 'inventory.itemid (id)', + 'inventory.itemjson (json)', + 'items.itemname (name)', + 'items.itemdesc (description)', + 'items.itemcode (code)', + 'itemclasses.classid (classid)', + 'itemclasses.classname (classname' + ], [ + "playeruuid" => getRequestUser()->getUID() + ] +); + +exitWithJson(["status" => "OK", "items" => $items]); \ No newline at end of file diff --git a/api/actions/nearby.php b/api/actions/nearby.php new file mode 100644 index 0000000..a4fa65a --- /dev/null +++ b/api/actions/nearby.php @@ -0,0 +1,97 @@ +boundingCoordinates($radius, "miles"); + +ob_flush(); +$people = $database->debug()->select("accounts", [ + "publicid", + "name", + "username", + "verified", + "latitude", + "longitude" + ], [ + "AND" => [ + 'latitude[<>]' => [$searchbounds[0]->getLatitudeInDegrees(), $searchbounds[1]->getLatitudeInDegrees()], + 'longitude[<>]' => [$searchbounds[0]->getLongitudeInDegrees(), $searchbounds[1]->getLongitudeInDegrees()], + "lastgpsfix[>]" => date("Y-m-d H:i:s", strtotime("-1 hour")), + "type" => 2 + ], + "LIMIT" => 100 + ] +); +$query = ob_get_contents(); +ob_clean(); +$people = $database->query($query)->fetchAll(); + +$nearby = []; + +if (!empty($VARS["format"]) && $VARS["format"] == "geojson") { + $geojson = [ + "name" => "Nearby People", + "type" => "FeatureCollection", + "features" => [] + ]; + + foreach ($people as $person) { + $geojson["features"][] = [ + "type" => "Feature", + "geometry" => [ + "type" => "Point", + "coordinates" => [ + $person["longitude"] * 1.0, + $person["latitude"] * 1.0 + ] + ], + "properties" => [ + "id" => $person["publicid"], + "name" => utf8_encode(empty($person["name"]) ? $person["username"] : $person["name"]), + "username" => $person["username"], + "verified" => $person["verified"] == 1 + ] + ]; + } + + exitWithJson($geojson); +} + +foreach ($people as $person) { + $nearby[] = [ + "name" => (empty($person["name"]) ? $person["username"] : $person["name"]), + "username" => $person["username"], + "verified" => $person["verified"] == 1, + "publicid" => $person["publicid"], + "latitude" => $person["latitude"] * 1.0, + "longitude" => $person["longitude"] * 1.0 + ]; +} + +exitWithJson([ + "status" => "OK", + "radius" => $radius, + "bounds" => [ + 0 => [ + "latitude" => $searchbounds[0]->getLatitudeInDegrees(), + "longitude" => $searchbounds[0]->getLongitudeInDegrees() + ], + 1 => [ + "latitude" => $searchbounds[1]->getLatitudeInDegrees(), + "longitude" => $searchbounds[1]->getLongitudeInDegrees() + ], + ], + "nearby" => $nearby +]); diff --git a/api/actions/playerexists.php b/api/actions/playerexists.php new file mode 100644 index 0000000..3dc1f38 --- /dev/null +++ b/api/actions/playerexists.php @@ -0,0 +1,18 @@ +getUID(); +} else { + $accountid = $VARS["id"]; +} + +exitWithJson([ + "status" => "OK", + "exists" => $database->has("players", ["accountid" => $accountid]) +]); diff --git a/api/actions/submitcode.php b/api/actions/submitcode.php new file mode 100644 index 0000000..33e5bcf --- /dev/null +++ b/api/actions/submitcode.php @@ -0,0 +1,81 @@ + "OK", + "item" => "", + "munzee" => "", + "messages" => [] +]; + +try { + if (strpos($VARS["code"], "munzee") > 1) { + if (!empty($VARS["latitude"]) && !empty($VARS["longitude"]) && !empty($VARS["accuracy"])) { + include 'capturemunzee.php'; + } + } +} catch (Exception $ex) { +//file_put_contents("munzee.log", "Error with Munzee code: $ex\n", FILE_APPEND); +} + +if ($database->has('claimedcodes', ["AND" => ['code' => $VARS["code"], 'accountid' => getRequestUser()->getUID()]])) { + $returndata['messages'][] = $Strings->get("You've already discovered that.", false); +} else { + $codearray = str_split($VARS["code"]); + + $codeint = 0; + foreach ($codearray as $chr) { + $codeint += ord($chr); + } + Random::seed($codeint); + + $items = $database->select("items", ["itemid", "weight"]); + $weighted = []; + + foreach ($items as $item) { + for ($i = 0; $i < $item["weight"]; $i++) { + $weighted[] = $item["itemid"]; + } + } + $itemid = $weighted[Random::num(0, count($weighted))]; + + $database->insert('inventory', ['accountid' => getRequestUser()->getUID(), 'itemid' => $itemid]); + $database->insert('claimedcodes', ['code' => $VARS["code"], 'accountid' => getRequestUser()->getUID()]); + $itemname = $database->get('items', 'itemname', ['itemid' => $itemid]); + + $returndata["item"] = $itemname; + + $returndata['messages'][] = $Strings->build("You found one {item}", ["item" => $itemname], false); +} + +exitWithJson($returndata); diff --git a/api/apisettings.php b/api/apisettings.php index a0f511b..95c8998 100644 --- a/api/apisettings.php +++ b/api/apisettings.php @@ -11,5 +11,35 @@ $APIS = [ "load" => "ping.php", "vars" => [ ] + ], + "items" => [ + "load" => "items.php" + ], + "createplayer" => [ + "load" => "createplayer.php", + "vars" => [ + "team" => "/[1-6]/" + ] + ], + "playerexists" => [ + "load" => "playerexists.php", + "vars" => [ + "id (optional)" => "/[0-9]+/" + ] + ], + "getprofile" => [ + "load" => "getprofile.php", + "vars" => [ + "id (optional)" => "/[0-9]+/" + ] + ], + "code" => [ + "load" => "submitcode.php", + "vars" => [ + "code" => "string", + "latitude (optional)" => "/[0-9]{0,3}\.[0-9]{2,10}/", + "longitude (optional)" => "/[0-9]{0,3}\.[0-9]{2,10}/", + "accuracy (optional)" => "number" + ] ] -]; +]; \ No newline at end of file diff --git a/database.mwb b/database.mwb index a905e355a64a88c5083f516d2c9a6658f7e6036b..4cf762e8ecc4a9b86c502aed4dd134fd825313d4 100644 GIT binary patch literal 22468 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 Q;Ex~8ot)jkF0Lg10oZ#w{Qv*} literal 20381 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 R&>!sUYwzXr9PH;$@n0);Bzyn> diff --git a/database.mwb.bak b/database.mwb.bak new file mode 100644 index 0000000000000000000000000000000000000000..3414328eee7fa02c702d78fae0799a780fd4993f GIT binary patch literal 22460 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 Z_E#Z3TVFX&KSv)QTTgF)M_)h6{{jkT7dij{ literal 0 HcmV?d00001 diff --git a/database/migrate_v1.sql b/database/migrate_v1.sql new file mode 100644 index 0000000..993c226 --- /dev/null +++ b/database/migrate_v1.sql @@ -0,0 +1,136 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +/** + * Author: Skylar Ittner + * Created: Apr 26, 2019 + */ + +ALTER TABLE `terranquest`.`inventory` +DROP FOREIGN KEY `fk_inventory_players`; + +ALTER TABLE `terranquest`.`player_badges` +DROP FOREIGN KEY `fk_achievements_has_players_players1`; + +ALTER TABLE `terranquest`.`locations` +DROP FOREIGN KEY `fk_locations_players1`; + +ALTER TABLE `terranquest`.`claimedcodes` +DROP FOREIGN KEY `fk_claimedcodes_players1`; + +ALTER TABLE `terranquest`.`munzee` +DROP FOREIGN KEY `fk_munzee_players1`; + +ALTER TABLE `terranquest`.`messages` +DROP FOREIGN KEY `fk_messages_players1`; + +ALTER TABLE `terranquest`.`artifacts` +DROP FOREIGN KEY `fk_artifacts_players1`; + +ALTER TABLE `terranquest`.`private_messages` +DROP FOREIGN KEY `fk_private_messages_players1`, +DROP FOREIGN KEY `fk_private_messages_players2`; + +ALTER TABLE `terranquest`.`inventory` +CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`players` +CHANGE COLUMN `uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`player_badges` +CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`locations` +CHANGE COLUMN `owneruuid` `ownerid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ; + +ALTER TABLE `terranquest`.`claimedcodes` +CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`munzee` +CHANGE COLUMN `player_uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`messages` +CHANGE COLUMN `message` `message` VARCHAR(500) COLLATE 'utf8mb4_bin' NOT NULL , +CHANGE COLUMN `uuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ; + +ALTER TABLE `terranquest`.`artifacts` +CHANGE COLUMN `currentlife` `currentlife` DECIMAL(7,2) NOT NULL DEFAULT 100 , +CHANGE COLUMN `maxlife` `maxlife` DECIMAL(7,2) NOT NULL DEFAULT 100 , +CHANGE COLUMN `playeruuid` `accountid` VARCHAR(60) CHARACTER SET 'utf8' NULL DEFAULT NULL ; + +ALTER TABLE `terranquest`.`private_messages` +CHANGE COLUMN `from_uuid` `from_id` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL DEFAULT 0 , +CHANGE COLUMN `to_uuid` `to_id` VARCHAR(60) CHARACTER SET 'utf8' NOT NULL ; + +ALTER TABLE `terranquest`.`inventory` +ADD CONSTRAINT `fk_inventory_players` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`player_badges` +ADD CONSTRAINT `fk_achievements_has_players_players1` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`locations` +ADD CONSTRAINT `fk_locations_players1` + FOREIGN KEY (`ownerid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`claimedcodes` +ADD CONSTRAINT `fk_claimedcodes_players1` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`munzee` +ADD CONSTRAINT `fk_munzee_players1` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`messages` +ADD CONSTRAINT `fk_messages_players1` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`artifacts` +ADD CONSTRAINT `fk_artifacts_players1` + FOREIGN KEY (`accountid`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`private_messages` +ADD CONSTRAINT `fk_private_messages_players1` + FOREIGN KEY (`from_id`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, +ADD CONSTRAINT `fk_private_messages_players2` + FOREIGN KEY (`to_id`) + REFERENCES `terranquest`.`players` (`accountid`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; + +ALTER TABLE `terranquest`.`items` +ADD COLUMN `weight` INT(3) NOT NULL DEFAULT 1 AFTER `itemcode`; + +ALTER TABLE `terranquest`.`messages` +CHANGE COLUMN `message` `message` VARCHAR(500) COLLATE 'utf8mb4_bin' NOT NULL ; + +ALTER TABLE `terranquest`.`artifacts` +CHANGE COLUMN `currentlife` `currentlife` DECIMAL(7,2) NOT NULL DEFAULT 100 , +CHANGE COLUMN `maxlife` `maxlife` DECIMAL(7,2) NOT NULL DEFAULT 100 ; \ No newline at end of file