From 6b7d941c700d1b211a1772254eddbcc882d64cf1 Mon Sep 17 00:00:00 2001 From: pizzaboxer <41478239+pizzaboxer@users.noreply.github.com> Date: Sun, 1 Jan 2023 13:44:27 +0000 Subject: [PATCH] whoops thats not september --- .gitattributes | 2 - .gitignore | 8 +- XD.php | 8 + admin.php | 89 +- api/account/character/get-assets.php | 12 +- api/account/character/paint-body.php | 2 +- api/account/character/request-render.php | 2 +- api/account/get-feed.php | 107 ++ ...entlyPlayed.php => get-recentlyplayed.php} | 7 +- ...{transactions.php => get-transactions.php} | 7 +- api/account/getFeed.php | 60 -- ...odate-password.php => update-password.php} | 13 +- api/account/{ping.php => update-ping.php} | 5 +- api/account/update-settings.php | 7 +- api/account/update-status.php | 44 + api/account/updateStatus.php | 28 - api/admin/addBanner.php | 26 - api/admin/delete-post.php | 11 +- api/admin/get-assets.php | 12 +- api/admin/getUnapprovedAssets.php | 19 +- api/admin/git-pull.php | 9 +- api/admin/giveCurrency.php | 6 +- api/admin/moderateAsset.php | 11 +- api/admin/moderateUser.php | 12 +- api/admin/previewModeration.php | 2 +- api/admin/request-render.php | 25 +- api/admin/upload.php | 59 +- api/catalog/get-comments.php | 7 +- api/catalog/post-comment.php | 10 +- api/catalog/purchase.php | 43 +- api/develop/getCreations.php | 10 +- api/develop/upload.php | 69 +- api/discord/check-verification.php | 25 + api/discord/whois.php | 28 + api/friends/getFriendRequests.php | 7 +- api/friends/getFriends.php | 11 +- api/games/getServers.php | 15 +- api/games/serverlauncher.php | 9 +- api/groups/admin/get-members.php | 52 + api/groups/admin/get-roles.php | 44 + api/groups/admin/request-relationship.php | 110 +++ api/groups/admin/update-member.php | 57 ++ api/groups/admin/update-relationship.php | 104 ++ api/groups/admin/update-roles.php | 167 ++++ api/groups/delete-wall-post.php | 40 + api/groups/get-audit.php | 75 ++ api/groups/get-members.php | 52 + api/groups/get-related.php | 82 ++ api/groups/get-wall.php | 53 + api/groups/join-group.php | 30 + api/groups/leave-group.php | 21 + api/groups/post-shout.php | 56 ++ api/groups/post-wall.php | 38 + api/ide/toolbox.php | 7 +- api/private/components/Auth.php | 40 + api/private/components/Catalog.php | 137 +++ api/private/components/Discord.php | 61 ++ api/private/components/ErrorHandler.php | 115 +++ api/private/components/Forum.php | 89 ++ api/private/components/Games.php | 24 + api/private/components/Groups.php | 162 ++++ api/private/components/Gzip.php | 51 + api/private/components/Image.php | 73 ++ api/private/components/RBXClient.php | 18 + api/private/components/System.php | 30 + api/private/components/Thumbnails.php | 112 +++ api/private/components/TwoFactorAuth.php | 47 + api/private/{ => components}/db.php | 15 +- api/private/{ => components}/pagebuilder.php | 496 +++++----- api/private/config.sample.php | 44 + api/private/core.php | 912 ++++++------------ api/thumbs/ping.php | 4 +- api/thumbs/queue.php | 4 +- api/thumbs/render.php | 4 +- api/thumbs/update.php | 4 +- api/thumbs/upload.php | 41 +- api/users/get-badges.php | 75 ++ api/users/get-groups.php | 56 ++ .../{getInventory.php => get-inventory.php} | 15 +- api/users/getBadges.php | 44 - asset/index.php | 131 ++- browse.php | 160 ++- catalog.php | 110 +-- css/fonts/ssprobold.woff | Bin 0 -> 28700 bytes css/fonts/ssprolight.woff | Bin 0 -> 26540 bytes css/fonts/ssproregular.woff | Bin 0 -> 29448 bytes css/fonts/ssprosemibold.woff | Bin 0 -> 29332 bytes css/polygon-2013.css | 89 ++ css/polygon-2014.css | 829 ++++++++++++++++ css/polygon-dark.css | 11 +- css/polygon-hitius.css | 20 + css/polygon.css | 49 +- develop.php | 11 +- directory_admin/create-asset.php | 6 +- directory_admin/error-log.php | 47 + directory_admin/give-asset.php | 86 ++ directory_admin/give-currency.php | 2 +- directory_admin/moderate-assets.php | 14 +- directory_admin/moderate-user.php | 11 +- directory_admin/render-queue.php | 3 +- directory_admin/site-banners.php | 21 +- directory_admin/staff-audit.php | 107 ++ directory_admin/staff-logs.php | 60 -- directory_forum/addpost.php | 18 +- directory_forum/showpost.php | 35 +- directory_games/configure.php | 61 +- directory_games/new.php | 98 +- directory_games/server.php | 27 +- directory_login/2fa.php | 24 +- discord.php | 2 +- error.php | 66 +- forum.php | 85 +- friends.php | 25 +- game/MachineConfiguration.ashx | 1 - game/join.php | 34 +- game/server-old.php | 225 +++++ game/server.php | 290 ++++-- games.php | 9 +- groups.php | 295 ++++++ home.php | 115 +-- img/2013/BuildPage/btn-gear_sprite_27px.png | Bin 0 -> 1419 bytes .../Buttons/Arrows/btn-silver-left-27.png | Bin 0 -> 1687 bytes .../Buttons/Arrows/btn-silver-right-27.png | Bin 0 -> 1720 bytes .../StyleGuide/bg-btn-blue-arrow-md.png | Bin 0 -> 1687 bytes img/2013/Buttons/StyleGuide/bg-btn-blue.png | Bin 0 -> 1944 bytes .../StyleGuide/bg-btn-gray-arrow-md.png | Bin 0 -> 1658 bytes img/2013/Buttons/StyleGuide/bg-btn-gray.png | Bin 0 -> 1552 bytes img/2013/Buttons/StyleGuide/bg-btn-green.png | Bin 0 -> 1901 bytes .../Buttons/StyleGuide/bg-lg-green-play.png | Bin 0 -> 8353 bytes img/2013/Buttons/bg-drop_down_btn.png | Bin 0 -> 1569 bytes img/2013/Buttons/bg-form_btn_lg-tile.png | Bin 0 -> 1245 bytes img/2013/Buttons/questionmark-12x12.png | Bin 0 -> 291 bytes img/2013/GamesPage/arrow_left.png | Bin 0 -> 1358 bytes img/2013/GamesPage/arrow_right.png | Bin 0 -> 1361 bytes .../Nav2014-icon-sprite-sheet.png | Bin 0 -> 13444 bytes .../StyleGuide/btn-control-large-tile.png | Bin 0 -> 994 bytes .../StyleGuide/btn-control-medium-tile.png | Bin 0 -> 983 bytes .../StyleGuide/btn-control-small-tile.png | Bin 0 -> 1036 bytes img/2013/roblox_logo.png | Bin 0 -> 7483 bytes img/badges/CatalogManager.png | Bin 0 -> 64174 bytes img/badges/Friends.png | Bin 0 -> 85707 bytes img/badges/Moderator.png | Bin 0 -> 23864 bytes img/badges/Veteran.png | Bin 0 -> 93699 bytes img/error.png | Bin 2001 -> 3347 bytes img/feed/cart.png | Bin 0 -> 5130 bytes img/feed/friends.png | Bin 0 -> 5423 bytes index.php | 216 ++++- info/privacy.php | 1 - info/selfhosting.php | 21 - info/terms-of-service.php | 2 +- item.php | 42 +- js/Navigation2014.js | 265 +++++ js/polygon/Navigation2014.js | 210 ++++ js/polygon/catalog.js | 2 + js/polygon/character.js | 108 +++ js/polygon/core.js | 272 ++++++ js/polygon/games.js | 72 +- js/polygon/groups.js | 715 ++++++++++++++ js/polygon/home.js | 54 ++ js/polygon/inventory.js | 14 +- js/polygon/money.js | 49 + js/polygon/profile.js | 88 ++ keys/template.png | Bin 0 -> 24671 bytes login.php | 16 +- messages/inbox.php | 2 +- moderation.php | 12 +- my/account.php | 353 ++++--- my/character.php | 161 +--- my/creategroup.php | 268 +++++ my/groupadmin.php | 339 +++++++ my/groupaudit.php | 88 ++ my/item.php | 119 ++- my/money.php | 46 +- my/stuff.php | 43 +- {asset => rbxclient/asset}/bodycolors.php | 2 +- {asset => rbxclient/asset}/characterfetch.php | 6 +- .../asset/getscriptstate.html | 0 rbxclient/game/edit.php | 62 ++ rbxclient/game/gameserver.php | 5 +- rbxclient/game/join.php | 7 +- rbxclient/game/keepalivepinger.php | 1 + .../luawebservice/handlesocialrequest.php | 46 +- rbxclient/game/machineconfiguration.php | 1 + rbxclient/game/studio.php | 3 +- rbxclient/game/visit.php | 13 +- rbxclient/login/negotiate.php | 12 + rbxclient/studio/publish-model.php | 19 +- register.php | 154 --- thumbs/Script.png | Bin 11430 -> 49482 bytes thumbs/asset.php | 3 +- thumbs/audio.png | Bin 22731 -> 55723 bytes thumbs/avatar.php | 3 +- thumbs/avatar2.php | 3 +- thumbs/rawavatar.php | 4 +- user.php | 407 ++++---- 195 files changed, 9203 insertions(+), 2791 deletions(-) delete mode 100644 .gitattributes create mode 100644 XD.php create mode 100644 api/account/get-feed.php rename api/account/{getRecentlyPlayed.php => get-recentlyplayed.php} (76%) rename api/account/{transactions.php => get-transactions.php} (91%) delete mode 100644 api/account/getFeed.php rename api/account/{uodate-password.php => update-password.php} (78%) rename api/account/{ping.php => update-ping.php} (70%) create mode 100644 api/account/update-status.php delete mode 100644 api/account/updateStatus.php delete mode 100644 api/admin/addBanner.php create mode 100644 api/discord/check-verification.php create mode 100644 api/discord/whois.php create mode 100644 api/groups/admin/get-members.php create mode 100644 api/groups/admin/get-roles.php create mode 100644 api/groups/admin/request-relationship.php create mode 100644 api/groups/admin/update-member.php create mode 100644 api/groups/admin/update-relationship.php create mode 100644 api/groups/admin/update-roles.php create mode 100644 api/groups/delete-wall-post.php create mode 100644 api/groups/get-audit.php create mode 100644 api/groups/get-members.php create mode 100644 api/groups/get-related.php create mode 100644 api/groups/get-wall.php create mode 100644 api/groups/join-group.php create mode 100644 api/groups/leave-group.php create mode 100644 api/groups/post-shout.php create mode 100644 api/groups/post-wall.php create mode 100644 api/private/components/Auth.php create mode 100644 api/private/components/Catalog.php create mode 100644 api/private/components/Discord.php create mode 100644 api/private/components/ErrorHandler.php create mode 100644 api/private/components/Forum.php create mode 100644 api/private/components/Games.php create mode 100644 api/private/components/Groups.php create mode 100644 api/private/components/Gzip.php create mode 100644 api/private/components/Image.php create mode 100644 api/private/components/RBXClient.php create mode 100644 api/private/components/System.php create mode 100644 api/private/components/Thumbnails.php create mode 100644 api/private/components/TwoFactorAuth.php rename api/private/{ => components}/db.php (70%) rename api/private/{ => components}/pagebuilder.php (55%) create mode 100644 api/private/config.sample.php create mode 100644 api/users/get-badges.php create mode 100644 api/users/get-groups.php rename api/users/{getInventory.php => get-inventory.php} (77%) delete mode 100644 api/users/getBadges.php create mode 100644 css/fonts/ssprobold.woff create mode 100644 css/fonts/ssprolight.woff create mode 100644 css/fonts/ssproregular.woff create mode 100644 css/fonts/ssprosemibold.woff create mode 100644 css/polygon-2013.css create mode 100644 css/polygon-2014.css create mode 100644 css/polygon-hitius.css create mode 100644 directory_admin/error-log.php create mode 100644 directory_admin/give-asset.php create mode 100644 directory_admin/staff-audit.php delete mode 100644 directory_admin/staff-logs.php delete mode 100644 game/MachineConfiguration.ashx create mode 100644 game/server-old.php create mode 100644 groups.php create mode 100644 img/2013/BuildPage/btn-gear_sprite_27px.png create mode 100644 img/2013/Buttons/Arrows/btn-silver-left-27.png create mode 100644 img/2013/Buttons/Arrows/btn-silver-right-27.png create mode 100644 img/2013/Buttons/StyleGuide/bg-btn-blue-arrow-md.png create mode 100644 img/2013/Buttons/StyleGuide/bg-btn-blue.png create mode 100644 img/2013/Buttons/StyleGuide/bg-btn-gray-arrow-md.png create mode 100644 img/2013/Buttons/StyleGuide/bg-btn-gray.png create mode 100644 img/2013/Buttons/StyleGuide/bg-btn-green.png create mode 100644 img/2013/Buttons/StyleGuide/bg-lg-green-play.png create mode 100644 img/2013/Buttons/bg-drop_down_btn.png create mode 100644 img/2013/Buttons/bg-form_btn_lg-tile.png create mode 100644 img/2013/Buttons/questionmark-12x12.png create mode 100644 img/2013/GamesPage/arrow_left.png create mode 100644 img/2013/GamesPage/arrow_right.png create mode 100644 img/2013/Icons/Navigation2014/Nav2014-icon-sprite-sheet.png create mode 100644 img/2013/StyleGuide/btn-control-large-tile.png create mode 100644 img/2013/StyleGuide/btn-control-medium-tile.png create mode 100644 img/2013/StyleGuide/btn-control-small-tile.png create mode 100644 img/2013/roblox_logo.png create mode 100644 img/badges/CatalogManager.png create mode 100644 img/badges/Friends.png create mode 100644 img/badges/Moderator.png create mode 100644 img/badges/Veteran.png create mode 100644 img/feed/cart.png create mode 100644 img/feed/friends.png delete mode 100644 info/selfhosting.php create mode 100644 js/Navigation2014.js create mode 100644 js/polygon/Navigation2014.js create mode 100644 js/polygon/character.js create mode 100644 js/polygon/core.js create mode 100644 js/polygon/groups.js create mode 100644 js/polygon/home.js create mode 100644 js/polygon/money.js create mode 100644 js/polygon/profile.js create mode 100644 keys/template.png create mode 100644 my/creategroup.php create mode 100644 my/groupadmin.php create mode 100644 my/groupaudit.php rename {asset => rbxclient/asset}/bodycolors.php (95%) rename {asset => rbxclient/asset}/characterfetch.php (71%) rename asset/GetScriptState.ashx => rbxclient/asset/getscriptstate.html (100%) create mode 100644 rbxclient/game/edit.php create mode 100644 rbxclient/game/keepalivepinger.php create mode 100644 rbxclient/game/machineconfiguration.php create mode 100644 rbxclient/login/negotiate.php delete mode 100644 register.php diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index dfe0770..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/.gitignore b/.gitignore index 9de68b3..843c6ea 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -/thumbs/assets/* -/thumbs/avatars/* -/asset/files/* -/api/private/config.php \ No newline at end of file +thumbs/assets/* +thumbs/avatars/* +asset/files/* +api/private/config.php \ No newline at end of file diff --git a/XD.php b/XD.php new file mode 100644 index 0000000..825566b --- /dev/null +++ b/XD.php @@ -0,0 +1,8 @@ + +Do not run game:HttpGet("http://polygon.pizzaboxer.xyz/XD") in studio +please no +Plz + "Moderator", + Users::STAFF_ADMINISTRATOR => "Administrator", + Users::STAFF_CATALOG => "Catalog Manager" +]; + +$servermemory = System::GetMemoryUsage(); +$usersOnline = Users::GetUsersOnline(); +$pendingRenders = Polygon::GetPendingRenders(); +$thumbPing = Polygon::GetServerPing(1); $usage = (object) [ "Memory" => (object) [ - "Total" => system::getFileSize($servermemory->total), - "SytemUsage" => system::getFileSize($servermemory->total-$servermemory->free), - "PHPUsage" => system::getFileSize(memory_get_usage(true)) + "Total" => System::GetFileSize($servermemory->total), + "SytemUsage" => System::GetFileSize($servermemory->total-$servermemory->free), + "PHPUsage" => System::GetFileSize(memory_get_usage(true)) ], "Disk" => (object) [ - "Total" => system::getFileSize(disk_total_space("/")), - "SystemUsage" => system::getFileSize(disk_total_space("/")-disk_free_space("/")), - "PolygonUsage" => system::getFolderSize("/var/www/pizzaboxer.xyz/polygon/"), - "SetupUsage" => system::getFileSize(getSetupUsage([2009, 2010, 2011, 2012])) + "Total" => System::GetFileSize(disk_total_space("/")), + "SystemUsage" => System::GetFileSize(disk_total_space("/")-disk_free_space("/")), + "PolygonUsage" => System::GetFolderSize("/var/www/pizzaboxer.xyz/polygon/"), + "ThumbnailUsage" => System::GetFolderSize("/var/www/pizzaboxer.xyz/polygoncdn/"), + "SetupUsage" => System::GetFileSize(getSetupUsage([2009, 2010, 2011, 2012])) ] ]; @@ -51,45 +60,51 @@ pageBuilder::buildHeader();

Administration

-
-
-

You are "Moderator", 2 => "Administrator"][SESSION["adminLevel"]])?> - Choose an action

-
-
+
+

You are

+
+ + -
+ + -
+ - = 2) { ?> -
+ + -
+ -
- Staff Logs + -
+ + + - -
+ + + - - -
-
-
+

Website / Server Info

@@ -106,7 +121,8 @@ pageBuilder::buildHeader();

Disk->SystemUsage?> / Disk->Total?> Used

- is using Disk->PolygonUsage?>
+ is using Disk->PolygonUsage?>
+ Thumbnail CDN is using Disk->ThumbnailUsage?>
Client setup (2009-2012) is using Disk->SetupUsage?> total
@@ -131,7 +147,6 @@ pageBuilder::buildHeader(); dead much?
-
diff --git a/api/account/character/get-assets.php b/api/account/character/get-assets.php index 5536461..f87f56d 100644 --- a/api/account/character/get-assets.php +++ b/api/account/character/get-assets.php @@ -1,5 +1,7 @@ - "POST", "logged" => true, "secure" => true]); $wearing = isset($_POST["wearing"]) && $_POST["wearing"] == "true"; @@ -14,8 +16,8 @@ if($wearing) } else { - $type_str = catalog::getTypeByNum($type); - if(!catalog::getTypeByNum($type)) api::respond(400, false, "Invalid asset type"); + $type_str = Catalog::GetTypeByNum($type); + if(!Catalog::GetTypeByNum($type)) api::respond(400, false, "Invalid asset type"); $query = $pdo->prepare("SELECT COUNT(*) FROM ownedAssets INNER JOIN assets ON assets.id = assetId WHERE userId = :uid AND assets.type = :type AND wearing = 0"); $query->bindParam(":type", $type, PDO::PARAM_INT); } @@ -23,6 +25,8 @@ $query->bindParam(":uid", $userId, PDO::PARAM_INT); $query->execute(); $pages = ceil($query->fetchColumn()/8); +if($page > $pages) $page = $pages; +if(!is_numeric($page) || $page < 1) $page = 1; $offset = ($page - 1)*8; if(!$pages) api::respond(200, true, $wearing ? 'You are not currently wearing anything' : 'You don\'t have any unequipped '.($type_str.(!str_ends_with($type_str, 's') ? 's' : '').' to wear')); diff --git a/api/account/character/paint-body.php b/api/account/character/paint-body.php index 9517a9f..bd17a12 100644 --- a/api/account/character/paint-body.php +++ b/api/account/character/paint-body.php @@ -8,7 +8,7 @@ $bodyPart = $_POST["BodyPart"] ?? false; $color = $_POST["Color"] ?? false; if(!$color || !in_array($bodyPart, ["Head", "Torso", "Left Arm", "Right Arm", "Left Leg", "Right Leg"])) api::respond(400, false, "Bad Request"); -$brickcolor = users::hex2bc(rgbtohex($color)); +$brickcolor = Users::hex2bc(rgbtohex($color)); if(!$brickcolor) api::respond(200, false, "Invalid body color #".rgbtohex($color)); $bodyColors->{$bodyPart} = $brickcolor; $bodyColors = json_encode($bodyColors); diff --git a/api/account/character/request-render.php b/api/account/character/request-render.php index 8f444ca..487e7ac 100644 --- a/api/account/character/request-render.php +++ b/api/account/character/request-render.php @@ -2,6 +2,6 @@ require $_SERVER['DOCUMENT_ROOT'].'/api/private/core.php'; api::initialize(["method" => "POST", "logged_in" => true, "secure" => true]); -polygon::requestRender("Avatar", SESSION["userId"]); +Polygon::RequestRender("Avatar", SESSION["userId"]); api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/account/get-feed.php b/api/account/get-feed.php new file mode 100644 index 0000000..37bea5e --- /dev/null +++ b/api/account/get-feed.php @@ -0,0 +1,107 @@ + "POST", "logged_in" => true]); + +$FeedResults = db::run( + "SELECT feed.*, users.username FROM feed + INNER JOIN users ON users.id = feed.userId WHERE userId = :uid + OR groupId IS NULL AND userId IN + ( + SELECT (CASE WHEN requesterId = :uid THEN receiverId ELSE requesterId END) FROM friends + WHERE requesterId = :uid OR receiverId = :uid AND status = 1 + ) + OR groupId IN + ( + SELECT groups_members.GroupID FROM groups_members + INNER JOIN groups_ranks ON groups_ranks.GroupID = groups_members.GroupID AND groups_ranks.Rank = groups_members.Rank + WHERE groups_members.UserID = :uid AND groups_ranks.permissions LIKE '%\"CanViewGroupStatus\":true%' + ) + ORDER BY feed.id DESC LIMIT 15", + [":uid" => SESSION["userId"]] +); + +$feed = []; +$news = []; + +/*$news[] = +[ + "header" => '

lol

', + "message" => 'fucked your mom' +];*/ + +/*$news[] = +[ + "header" => '

this isn\'t dead!!!! (probably)

', + "message" => "ive been more inclined to work on polygon now after like 4 months, so i guess development has resumed

2fa has been implemented, and next on the roadmap is the catalog system. so yeah, stay tuned for that" +];*/ + +/* $news[] = +[ + "header" => "", + "img" => "https://media.discordapp.net/attachments/745025397749448814/835635922590629888/HDKolobok-256px-3.gif", + // "message" => "What you know about KOLONBOK. ™ " + "message" => "KOLONBOK. ™ Has fix 2009" +]; */ + +/* $news[] = +[ + "header" => "Groups have been released!", + "img" => "/img/ProjectPolygon.png", + "message" => "Groups have now been fully released, with more functionality than you could ever imagine. Groups don't cost anything to make, and you can join up to 20 of them.
If you haven't yet, come join the official group!" +]; */ + +while($row = $FeedResults->fetch(PDO::FETCH_OBJ)) +{ + $timestamp = timeSince($row->timestamp); + + if($row->groupId == NULL) + { + $feed[] = + [ + "userName" => $row->username, + "img" => Thumbnails::GetAvatar($row->userId, 100, 100), + "header" => "

userId}\">{$row->username} - {$timestamp}

", + "message" => Polygon::FilterText($row->text) + ]; + } + else + { + $GroupInfo = Groups::GetGroupInfo($row->groupId, true, true); + + $feed[] = + [ + "userName" => $GroupInfo->name, + "img" => Thumbnails::GetAssetFromID($GroupInfo->emblem, 420, 420), + "header" => "

id}\">{$GroupInfo->name} - posted by userId}\">{$row->username} - {$timestamp}

", + "message" => Polygon::FilterText($row->text) + ]; + } +} + +$FeedCount = $FeedResults->rowCount(); + +if($FeedCount < 15) +{ + $feed[] = + [ + "userName" => "Your feed is currently empty!", + "img" => "/img/feed/friends.png", + "header" => "

Looks like your feed's empty

", + "message" => "If you haven't made any friends yet, go make some!
If you already have some, why don't you kick off the discussion?" + ]; + + if($FeedCount < 14) + { + $feed[] = + [ + "userName" => "Customize your character", + "img" => "/img/feed/cart.png", + "header" => "

Customize your character

", + "message" => "Log in every day and earn 10 pizzas. Pizzas can be used to buy clothing in our catalog. You can also create your own clothing on the Build page." + ]; + } +} + +api::respond_custom(["status" => 200, "success" => true, "message" => "OK", "feed" => $feed, "news" => $news]); \ No newline at end of file diff --git a/api/account/getRecentlyPlayed.php b/api/account/get-recentlyplayed.php similarity index 76% rename from api/account/getRecentlyPlayed.php rename to api/account/get-recentlyplayed.php index 484487e..9e2128a 100644 --- a/api/account/getRecentlyPlayed.php +++ b/api/account/get-recentlyplayed.php @@ -1,5 +1,8 @@ "POST", "logged_in" => true]); $userid = SESSION["userId"]; @@ -16,10 +19,10 @@ $query->execute(); while($game = $query->fetch(PDO::FETCH_OBJ)) $items[] = [ - "game_name" => polygon::filterText($game->name), + "game_name" => Polygon::FilterText($game->name), "game_id" => $game->id, "game_thumbnail" => Thumbnails::GetAvatar($game->hoster, 250, 250), - "playing" => games::getPlayersInServer($game->id)->rowCount() + "playing" => Games::GetPlayersInServer($game->id)->rowCount() ]; api::respond_custom(["status" => 200, "success" => true, "message" => "OK", "items" => $items]); \ No newline at end of file diff --git a/api/account/transactions.php b/api/account/get-transactions.php similarity index 91% rename from api/account/transactions.php rename to api/account/get-transactions.php index 4970bec..524b40c 100644 --- a/api/account/transactions.php +++ b/api/account/get-transactions.php @@ -1,5 +1,6 @@ - "POST", "logged_in" => true, "secure" => true]); $userid = SESSION["userId"]; @@ -31,7 +32,7 @@ while($transaction = $query->fetch(PDO::FETCH_OBJ)) $transactions[] = [ "type" => $type == "Sales" ? "Sold" : "Purchased", - "date" => date('n/j/y', $transaction->timestamp), + "date" => date('j/n/y', $transaction->timestamp), "member_name" => $transaction->username, "member_id" => $memberID, "member_avatar" => Thumbnails::GetAvatar($memberID, 48, 48), diff --git a/api/account/getFeed.php b/api/account/getFeed.php deleted file mode 100644 index 4afc08c..0000000 --- a/api/account/getFeed.php +++ /dev/null @@ -1,60 +0,0 @@ - "POST", "logged_in" => true]); - -$userid = SESSION["userId"]; - -$query = $pdo->prepare(" - SELECT * FROM feed - WHERE userId = :uid - OR userId IN (SELECT receiverId FROM friends WHERE requesterId = :uid AND status = 1) - OR userId IN (SELECT requesterId FROM friends WHERE receiverId = :uid AND status = 1) - ORDER BY id DESC LIMIT 15"); -$query->bindParam(":uid", $userid, PDO::PARAM_INT); -$query->execute(); - -$feed = []; -$news = []; - -/*$news[] = -[ - "header" => '

lol

', - "message" => 'fucked your mom' -];*/ - -/*$news[] = -[ - "header" => '

this isn\'t dead!!!! (probably)

', - "message" => "ive been more inclined to work on polygon now after like 4 months, so i guess development has resumed

2fa has been implemented, and next on the roadmap is the catalog system. so yeah, stay tuned for that" -];*/ - -/* $news[] = -[ - "header" => "", - "img" => "https://media.discordapp.net/attachments/745025397749448814/835635922590629888/HDKolobok-256px-3.gif", - // "message" => "What you know about KOLONBOK. ™ " - "message" => "KOLONBOK. ™ Has fix 2009" -]; */ - -while($row = $query->fetch(PDO::FETCH_OBJ)) -{ - $feed[] = - [ - "userName" => users::getUserNameFromUid($row->userId), - "img" => Thumbnails::GetAvatar($row->userId, 100, 100), - "header" => '

'.users::getUserNameFromUid($row->userId).' - '.timeSince('@'.$row->timestamp).'

', - "message" => polygon::filterText($row->text) - ]; -} - -if($query->rowCount() < 15) -{ - $feed[] = - [ - "userName" => "Your feed is currently empty!", - "img" => "/img/feed-starter.png", - "header" => '

Looks like your feed\'s empty

', - "message" => "If you haven't made any friends yet, go make some!
If you already have some, why don't you kick off the discussion?" - ]; -} -api::respond_custom(["status" => 200, "success" => true, "message" => "OK", "feed" => $feed, "news" => $news]); \ No newline at end of file diff --git a/api/account/uodate-password.php b/api/account/update-password.php similarity index 78% rename from api/account/uodate-password.php rename to api/account/update-password.php index 945f539..5ae65d7 100644 --- a/api/account/uodate-password.php +++ b/api/account/update-password.php @@ -1,20 +1,21 @@ - "POST", "logged_in" => true, "secure" => true]); if(!isset($_POST['currentpwd']) || !isset($_POST['newpwd']) || !isset($_POST['confnewpwd'])) api::respond(400, false, "Bad Request"); $userid = SESSION["userId"]; $row = (object)SESSION["userInfo"]; -$currentpwd = new auth($_POST['currentpwd']); -$newpwd = new auth($_POST['newpwd']); +$currentpwd = new Auth($_POST['currentpwd']); +$newpwd = new Auth($_POST['newpwd']); if($row->lastpwdchange+1800 > time()) api::respond(429, false, "Please wait ".ceil((($row->lastpwdchange+1800)-time())/60)." minutes before attempting to change your password again"); -if(!$currentpwd->verifyPassword($row->password)) api::respond(400, false, "Your current password does not match"); +if(!$currentpwd->VerifyPassword($row->password)) api::respond(400, false, "Your current password does not match"); if($_POST['currentpwd'] == $_POST['newpwd']) api::respond(400, false, "Your new password cannot be the same as your current one"); if(strlen(preg_replace('/[0-9]/', "", $_POST['newpwd'])) < 6) api::respond(400, false, "Your new password is too weak. Make sure it contains at least six non-numeric characters"); if(strlen(preg_replace('/[^0-9]/', "", $_POST['newpwd'])) < 2) api::respond(400, false, "Your new password is too weak. Make sure it contains at least two numbers"); if($_POST['newpwd'] != $_POST['confnewpwd']) api::respond(400, false, "Confirmation password does not match"); -$newpwd->updatePassword($userid); +$newpwd->UpdatePassword($userid); api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/account/ping.php b/api/account/update-ping.php similarity index 70% rename from api/account/ping.php rename to api/account/update-ping.php index 4f9abd2..a54094f 100644 --- a/api/account/ping.php +++ b/api/account/update-ping.php @@ -1,5 +1,4 @@ - "POST", "logged_in" => true, "secure" => true]); -users::updatePing(); +Users::UpdatePing(); api::respond_custom(["status" => 200, "success" => true, "message" => "OK", "friendRequests" => (int)SESSION["friendRequests"]]); \ No newline at end of file diff --git a/api/account/update-settings.php b/api/account/update-settings.php index 2ba030b..edea276 100644 --- a/api/account/update-settings.php +++ b/api/account/update-settings.php @@ -8,10 +8,11 @@ $userid = SESSION["userId"]; $filter = (int)($_POST['filter'] == 'true'); $debugging = (int)(isset($_POST['debugging']) && $_POST['debugging'] == 'true'); -if(!in_array($_POST['theme'], ["light", "dark"])) api::respond(200, false, "Invalid theme"); +if(!in_array($_POST['theme'], ["light", "dark", "hitius", "2014"])) api::respond(200, false, "Invalid theme"); -if(!strlen($_POST['blurb'])) api::respond(200, false, "Your blurb can't be empty!"); -if(strlen($_POST['blurb']) > 1000) api::respond(200, false, "Your blurb is too large!"); +if(!strlen($_POST['blurb'])) api::respond(200, false, "Your blurb can't be empty"); +if(strlen($_POST['blurb']) > 1000) api::respond(200, false, "Your blurb is too large"); +if(Polygon::IsExplicitlyFiltered($_POST["blurb"])) api::respond(200, false, "Your blurb contains inappropriate text"); db::run( "UPDATE users SET blurb = :blurb, filter = :filter, theme = :theme, debugging = :debugging WHERE id = :uid", diff --git a/api/account/update-status.php b/api/account/update-status.php new file mode 100644 index 0000000..fbb1bf6 --- /dev/null +++ b/api/account/update-status.php @@ -0,0 +1,44 @@ + "POST", "logged_in" => true, "secure" => true]); + +$userId = SESSION["userId"]; +$status = $_POST['status'] ?? false; + +if(!strlen($status)) api::respond(200, false, "Your status cannot be empty"); +if(strlen($status) > 140) api::respond(200, false, "Your status cannot be more than 140 characters"); + +//ratelimit +$query = db::run( + "SELECT timestamp FROM feed WHERE userId = :uid AND groupID IS NULL AND timestamp+300 > UNIX_TIMESTAMP()", + [":uid" => $userId] +); + +if($query->rowCount()) + api::respond(200, false, "Please wait ".GetReadableTime($query->fetchColumn(), ["RelativeTime" => "5 minutes"])." before updating your status"); + +db::run("INSERT INTO feed (userId, timestamp, text) VALUES (:uid, UNIX_TIMESTAMP(), :status)", [":uid" => $userId, ":status" => $status]); + +db::run("UPDATE users SET status = :status WHERE id = :uid", [":uid" => $userId, ":status" => $status]); + +if(time() < strtotime("2021-09-07 00:00:00") && stripos($status, "#bezosgang") !== false && !Catalog::OwnsAsset(SESSION["userId"], 2802)) +{ + db::run( + "INSERT INTO ownedAssets (assetId, userId, timestamp) VALUES (2802, :uid, UNIX_TIMESTAMP())", + [":uid" => SESSION["userId"]] + ); +} + +Discord::SendToWebhook( + [ + "username" => SESSION["userName"], + "content" => $status, + "avatar_url" => Thumbnails::GetAvatar(SESSION["userId"], 420, 420) + ], + Discord::WEBHOOK_KUSH +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/account/updateStatus.php b/api/account/updateStatus.php deleted file mode 100644 index 8f6a587..0000000 --- a/api/account/updateStatus.php +++ /dev/null @@ -1,28 +0,0 @@ - "POST", "logged_in" => true, "secure" => true]); - -$userId = SESSION["userId"]; -$status = $_POST['status'] ?? false; - -if(!$status) api::respond(405, false, "Your status cannot be empty"); -if(strlen($status) > 140) api::respond(405, false, "Your status cannot be more than 140 characters"); - -//ratelimit -$query = db::run("SELECT timestamp FROM feed WHERE userId = :uid AND timestamp+60 > UNIX_TIMESTAMP()", [":uid" => $userId]); -if($query->rowCount()) api::respond(400, false, "Please wait ".(($query->fetchColumn()+60)-time())." seconds before updating your status"); - -db::run("INSERT INTO feed (userId, timestamp, text) VALUES (:uid, UNIX_TIMESTAMP(), :status)", [":uid" => $userId, ":status" => $status]); - -db::run("UPDATE users SET status = :status WHERE id = :uid", [":uid" => $userId, ":status" => $status]); - -// $status = str_ireplace("http://", "", $status); -// $status = str_ireplace("https://", "", $status); - -polygon::sendKushFeed([ - "username" => SESSION["userName"], - "content" => $status, - "avatar_url" => Thumbnails::GetAvatar(SESSION["userId"], 420, 420) -]); - -api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/admin/addBanner.php b/api/admin/addBanner.php deleted file mode 100644 index c9a14b4..0000000 --- a/api/admin/addBanner.php +++ /dev/null @@ -1,26 +0,0 @@ - "POST", "admin" => true, "admin_ratelimit" => true, "secure" => true]); - -if(!isset($_POST["text"]) || !isset($_POST["bg-color"]) || !isset($_POST["text-color"])){ api::respond(400, false, "Invalid Request"); } -if($_POST["text-color"] != "dark" && $_POST["text-color"] != "light"){ api::respond(400, false, "Invalid Request"); } -if(!trim($_POST["text"])){ api::respond(400, false, "You haven't set the banner text"); } -if(strlen($_POST["text"]) > 128){ api::respond(400, false, "The banner text must be less than 128 characters"); } -if(!trim($_POST["bg-color"])){ api::respond(400, false, "You haven't set a background color"); } -if(!ctype_xdigit(ltrim($_POST["bg-color"], "#")) || strlen($_POST["bg-color"]) != 7){ api::respond(400, false, "That doesn't appear to be a valid hex color"); } -if($pdo->query("SELECT COUNT(*) FROM announcements WHERE activated")->fetchColumn() > 5){ api::respond(400, false, "There's too many banners currently active!"); } - -$userId = SESSION["userId"]; -$text = trim($_POST["text"]); -$color = trim($_POST["bg-color"]); -$textcolor = "text-".trim($_POST["text-color"]); - -$query = $pdo->prepare("INSERT INTO announcements (createdBy, text, bgcolor, textcolor) VALUES (:uid, :text, :bgc, :tc)"); -$query->bindParam(":uid", $userId, PDO::PARAM_INT); -$query->bindParam(":text", $text, PDO::PARAM_STR); -$query->bindParam(":bgc", $color, PDO::PARAM_STR); -$query->bindParam(":tc", $textcolor, PDO::PARAM_STR); -$query->execute(); - -users::logStaffAction("[ Banners ] Created site banner with text: ".$text); -api::respond(200, true, "Banner has been created"); \ No newline at end of file diff --git a/api/admin/delete-post.php b/api/admin/delete-post.php index 579fffe..60421fb 100644 --- a/api/admin/delete-post.php +++ b/api/admin/delete-post.php @@ -1,6 +1,7 @@ - "POST", "admin" => true, "admin_ratelimit" => true, "secure" => true]); + "POST", "admin" => [Users::STAFF_MODERATOR, Users::STAFF_ADMINISTRATOR], "admin_ratelimit" => true, "secure" => true]); if(!isset($_POST['postType'])){ api::respond(400, false, "Bad Request"); } if(!in_array($_POST['postType'], ["thread", "reply"])){ api::respond(400, false, "Bad Request"); } @@ -9,12 +10,12 @@ if(!is_numeric($_POST['postId'])){ api::respond(400, false, "Bad Request"); } $userid = SESSION["userId"]; $isThread = $_POST['postType'] == "thread"; -$threadInfo = $isThread ? forum::getThreadInfo($_POST['postId']) : forum::getReplyInfo($_POST['postId']); +$threadInfo = $isThread ? Forum::GetThreadInfo($_POST['postId']) : Forum::GetReplyInfo($_POST['postId']); if(!$threadInfo){ api::respond(400, false, "Post does not exist"); } $query = $isThread ? $pdo->prepare("UPDATE forum_threads SET deleted = 1 WHERE id = :id") : $pdo->prepare("UPDATE forum_replies SET deleted = 1 WHERE id = :id"); $query->bindParam(":id", $_POST['postId'], PDO::PARAM_INT); -if($query->execute()){ users::logStaffAction("[ Forums ] Deleted forum ".($isThread?"thread":"reply")." ID ".$_POST['postId']); api::respond(200, true, "OK"); } +if($query->execute()){ Users::LogStaffAction("[ Forums ] Deleted forum ".($isThread?"thread":"reply")." ID ".$_POST['postId']); api::respond(200, true, "OK"); } else{ api::respond(500, false, "Internal Server Error"); } \ No newline at end of file diff --git a/api/admin/get-assets.php b/api/admin/get-assets.php index 7719eed..1ed694b 100644 --- a/api/admin/get-assets.php +++ b/api/admin/get-assets.php @@ -1,12 +1,14 @@ - "POST", "admin" => true, "logged_in" => true, "secure" => true]); + "POST", "admin" => [Users::STAFF_CATALOG, Users::STAFF_ADMINISTRATOR], "logged_in" => true, "secure" => true]); $type = $_POST["type"] ?? false; $page = $_POST["page"] ?? 1; $assets = []; -if(!catalog::getTypeByNum($type)) api::respond(400, false, "Invalid asset type"); +if(!Catalog::GetTypeByNum($type)) api::respond(400, false, "Invalid asset type"); $query = $pdo->prepare("SELECT COUNT(*) FROM assets WHERE creator = 2 AND type = :type ORDER BY id DESC"); $query->bindParam(":type", $type, PDO::PARAM_INT); @@ -21,7 +23,7 @@ $query->execute(); while($asset = $query->fetch(PDO::FETCH_OBJ)) { - $info = catalog::getItemInfo($asset->id); + $info = Catalog::GetAssetInfo($asset->id); $assets[] = [ diff --git a/api/admin/getUnapprovedAssets.php b/api/admin/getUnapprovedAssets.php index 6605a5d..3c5eca1 100644 --- a/api/admin/getUnapprovedAssets.php +++ b/api/admin/getUnapprovedAssets.php @@ -1,17 +1,24 @@ - "POST", "admin" => true, "secure" => true]); + "POST", "admin" => Users::STAFF, "secure" => true]); $page = $_POST["page"] ?? 1; $assets = []; -$query = $pdo->query("SELECT COUNT(*) FROM assets WHERE NOT approved AND type != 1"); +$query = $pdo->query("SELECT COUNT(*) FROM assets WHERE NOT approved AND (type != 1 || (SELECT COUNT(*) FROM polygon.groups WHERE emblem = assets.id))"); $pages = ceil($query->fetchColumn()/18); $offset = ($page - 1)*18; if(!$pages) api::respond(200, true, "There are no assets to approve"); -$query = $pdo->prepare("SELECT assets.*, users.username FROM assets INNER JOIN users ON creator = users.id WHERE NOT approved AND type != 1 LIMIT 18 OFFSET :offset"); +$query = $pdo->prepare( + "SELECT assets.*, users.username FROM assets + INNER JOIN users ON creator = users.id + WHERE NOT approved AND (type != 1 || (SELECT COUNT(*) FROM polygon.groups WHERE emblem = assets.id)) + LIMIT 18 OFFSET :offset" +); $query->bindParam(":offset", $offset, PDO::PARAM_INT); $query->execute(); @@ -26,7 +33,7 @@ while($asset = $query->fetch(PDO::FETCH_OBJ)) "texture_id" => $asset->imageID, "creator_id" => $asset->creator, "creator_name" => $asset->username, - "type" => catalog::getTypeByNum($asset->type), + "type" => Catalog::GetTypeByNum($asset->type), "created" => date("j/n/y G:i A", $asset->created), "price" => $asset->sale ? $asset->price ? ' '.$asset->price : "Free" : "Off-Sale" ]; diff --git a/api/admin/git-pull.php b/api/admin/git-pull.php index 437e7eb..42a49cb 100644 --- a/api/admin/git-pull.php +++ b/api/admin/git-pull.php @@ -26,13 +26,13 @@ $output_array = []; if($emergency) { - $webhook .= sprintf("[%s] Git Pull intiated by %s\n", date('d/m/Y h:i:s A'), "[[[EMERGENCY]]]"); + $webhook .= sprintf("[%s] Git Pull intiated by %s on %s\n", date('d/m/Y h:i:s A'), "[[[OVERRIDE]]]", $_SERVER["HTTP_HOST"]); } else { require $_SERVER["DOCUMENT_ROOT"]."/api/private/core.php"; - if(!SESSION || !SESSION["adminLevel"]) die(http_response_code(404)); - $webhook .= sprintf("[%s] Git Pull executed by %s\n", date('d/m/Y h:i:s A'), SESSION["userName"]); + if(!Users::IsAdmin(Users::STAFF_ADMINISTRATOR)) die(http_response_code(404)); + $webhook .= sprintf("[%s] Git Pull executed by %s on %s\n", date('d/m/Y h:i:s A'), SESSION["userName"], $_SERVER["HTTP_HOST"]); } exec("git pull 2>&1", $output_array, $exitcode); @@ -46,4 +46,5 @@ $webhook .= "```yaml\n"; $webhook .= $output; $webhook .= "```"; -// sendSystemWebhook($webhook); +require $_SERVER["DOCUMENT_ROOT"]."/api/private/components/Discord.php"; +Discord::SendToWebhook(["content" => $webhook], Discord::WEBHOOK_POLYGON, false); diff --git a/api/admin/giveCurrency.php b/api/admin/giveCurrency.php index 00f9e9b..c867253 100644 --- a/api/admin/giveCurrency.php +++ b/api/admin/giveCurrency.php @@ -1,6 +1,6 @@ "POST", "admin" => true, "admin_ratelimit" => true, "secure" => true]); +api::initialize(["method" => "POST", "admin" => Users::STAFF_ADMINISTRATOR, "admin_ratelimit" => true, "secure" => true]); if(SESSION["userId"] != 1){ api::respond(400, false, "Insufficient admin level"); } if(!isset($_POST["username"]) || !isset($_POST["amount"]) || !isset($_POST["reason"])){ api::respond(400, false, "Invalid Request"); } @@ -13,7 +13,7 @@ if($_POST["amount"] > 500 || $_POST["amount"] < -500){ api::respond(400, false, if(!trim($_POST["reason"])){ api::respond(400, false, "You must set a reason"); } $amount = $_POST["amount"]; -$userInfo = users::getUserInfoFromUserName($_POST["username"]); +$userInfo = Users::GetInfoFromName($_POST["username"]); if(!$userInfo){ api::respond(400, false, "That user doesn't exist"); } if(($userInfo->currency + $_POST["amount"]) < 0){ api::respond(400, false, "That'll make the user go bankrupt!"); } @@ -22,5 +22,5 @@ $query->bindParam(":amount", $amount, PDO::PARAM_INT); $query->bindParam(":uid", $userInfo->id, PDO::PARAM_INT); $query->execute(); -users::logStaffAction("[ Currency ] Gave ".$_POST["amount"]." ".SITE_CONFIG["site"]["currency"]." to ".$userInfo->username." ( user ID ".$userInfo->id." ) ( Reason: ".$_POST["reason"]." )"); +Users::LogStaffAction("[ Currency ] Gave ".$_POST["amount"]." ".SITE_CONFIG["site"]["currency"]." to ".$userInfo->username." ( user ID ".$userInfo->id." ) ( Reason: ".$_POST["reason"]." )"); api::respond(200, true, "Gave ".$_POST["amount"]." ".SITE_CONFIG["site"]["currency"]." to ".$userInfo->username); \ No newline at end of file diff --git a/api/admin/moderateAsset.php b/api/admin/moderateAsset.php index 537d9b6..db69548 100644 --- a/api/admin/moderateAsset.php +++ b/api/admin/moderateAsset.php @@ -1,12 +1,13 @@ - "POST", "admin" => true, "secure" => true]); + "POST", "admin" => Users::STAFF, "secure" => true]); $assetId = $_POST['assetID'] ?? false; $action = $_POST['action'] ?? false; $action_sql = $action == "approve" ?: 2; $reason = $_POST['reason'] ?? false; -$asset = catalog::getItemInfo($assetId); +$asset = Catalog::GetAssetInfo($assetId); if(!in_array($action, ["approve", "decline"])) api::respond(400, false, "Invalid request"); if(!$asset) api::respond(400, false, "Asset does not exist"); @@ -17,5 +18,5 @@ $query->bindParam(":id", $asset->id, PDO::PARAM_INT); $query->bindParam(":image", $asset->imageID, PDO::PARAM_INT); $query->execute(); -users::logStaffAction('[ Asset Moderation ] '.ucfirst($action).'d "'.$asset->name.'" [ID '.$asset->id.']'.($reason ? ' with reason: '.$reason : '')); +Users::LogStaffAction('[ Asset Moderation ] '.ucfirst($action).'d "'.$asset->name.'" [ID '.$asset->id.']'.($reason ? ' with reason: '.$reason : '')); api::respond(200, true, '"'.htmlspecialchars($asset->name).'" has been '.$action.'d'); \ No newline at end of file diff --git a/api/admin/moderateUser.php b/api/admin/moderateUser.php index b87abcf..6e86d07 100644 --- a/api/admin/moderateUser.php +++ b/api/admin/moderateUser.php @@ -1,6 +1,6 @@ "POST", "admin" => true, "admin_ratelimit" => true, "secure" => true]); +api::initialize(["method" => "POST", "admin" => [Users::STAFF_MODERATOR, Users::STAFF_ADMINISTRATOR], "admin_ratelimit" => true, "secure" => true]); if(!isset($_POST["username"]) || !isset($_POST["banType"]) || !isset($_POST["moderationNote"]) || !isset($_POST["until"])){ api::respond(400, false, "Bad Request"); } if($_POST["banType"] < 1 || $_POST["banType"] > 4){ api::respond(400, false, "Bad Request"); } @@ -11,7 +11,7 @@ if($_POST["banType"] == 2 && empty($_POST["until"])){ api::respond(200, false, " $banType = $_POST["banType"]; $staffNote = isset($_POST["staffNote"]) && $_POST["staffNote"] ? $_POST["staffNote"] : ""; $userId = SESSION["userId"]; -$bannerInfo = users::getUserInfoFromUserName($_POST["username"]); +$bannerInfo = Users::GetInfoFromName($_POST["username"]); $reason = $_POST["moderationNote"]; $bannedUntil = $_POST["banType"] == 2 ? strtotime($_POST["until"]." ".date('G:i:s')) : 0; @@ -19,14 +19,14 @@ if(!$bannerInfo){ api::respond(200, false, "User does not exist"); } if($banType == 4) { - if(!users::getUserModeration($bannerInfo->id)){ api::respond(200, false, "That user isn't banned!"); } - users::undoUserModeration($bannerInfo->id, true); + if(!Users::GetUserModeration($bannerInfo->id)){ api::respond(200, false, "That user isn't banned!"); } + Users::UndoUserModeration($bannerInfo->id, true); } else { // if($bannerInfo->id == $userId){ api::respond(200, false, "You cannot moderate yourself!"); } // if($bannerInfo->adminlevel){ api::respond(200, false, "You cannot moderate a staff member"); } - if(users::getUserModeration($bannerInfo->id)){ api::respond(200, false, "That user is already banned!"); } + if(Users::GetUserModeration($bannerInfo->id)){ api::respond(200, false, "That user is already banned!"); } if($banType == 2 && $bannedUntil < strtotime('tomorrow')){ api::respond(200, false, "Ban time must be at least 1 day long"); } $query = $pdo->prepare("INSERT INTO bans (userId, bannerId, timeStarted, timeEnds, reason, banType, note) VALUES (:bid, :uid, UNIX_TIMESTAMP(), :ends, :reason, :type, :note)"); @@ -55,5 +55,5 @@ $staff = 4 => "Unbanned ".$bannerInfo->username ]; -users::logStaffAction("[ User Moderation ] ".$staff[$banType]." ( user ID ".$bannerInfo->id." )"); +Users::LogStaffAction("[ User Moderation ] ".$staff[$banType]." ( user ID ".$bannerInfo->id." )"); api::respond(200, true, $bannerInfo->username." has been ".$text[$banType]); \ No newline at end of file diff --git a/api/admin/previewModeration.php b/api/admin/previewModeration.php index 677a734..9a93a72 100644 --- a/api/admin/previewModeration.php +++ b/api/admin/previewModeration.php @@ -1,6 +1,6 @@ "POST", "admin" => true, "secure" => true]); +api::initialize(["method" => "POST", "admin" => [Users::STAFF_MODERATOR, Users::STAFF_ADMINISTRATOR], "secure" => true]); if(!isset($_POST["banType"]) || !isset($_POST["moderationNote"]) || !isset($_POST["until"])){ api::respond(400, false, "Invalid Request"); } if($_POST["banType"] < 1 || $_POST["banType"] > 3){ api::respond(400, false, "Invalid Request"); } diff --git a/api/admin/request-render.php b/api/admin/request-render.php index d7b46d0..082a250 100644 --- a/api/admin/request-render.php +++ b/api/admin/request-render.php @@ -1,6 +1,7 @@ - "POST", "admin" => true, "secure" => true]); + "POST", "admin" => Users::STAFF, "secure" => true]); $renderType = $_POST['renderType'] ?? false; $assetID = $_POST['assetID'] ?? false; @@ -11,24 +12,24 @@ if(!$assetID || !is_numeric($assetID)) api::respond(400, false, "Bad Request"); if($renderType == "Asset") { - $asset = catalog::getItemInfo($assetID); + $asset = Catalog::GetAssetInfo($assetID); if(!$asset) api::respond(200, false, "The asset you requested does not exist"); switch($asset->type) { - case 4: polygon::requestRender("Mesh", $assetID); break; // mesh - case 8: case 19: polygon::requestRender("Model", $assetID); break; // hat/gear - case 11: case 12: polygon::requestRender("Clothing", $assetID); break; // shirt/pants - case 17: polygon::requestRender("Head", $assetID); break; // head - case 10: polygon::requestRender("UserModel", $assetID); break; // user generated model + case 4: Polygon::RequestRender("Mesh", $assetID); break; // mesh + case 8: case 19: Polygon::RequestRender("Model", $assetID); break; // hat/gear + case 11: case 12: Polygon::RequestRender("Clothing", $assetID); break; // shirt/pants + case 17: Polygon::RequestRender("Head", $assetID); break; // head + case 10: Polygon::RequestRender("UserModel", $assetID); break; // user generated model default: api::respond(200, false, "This asset cannot be re-rendered"); } } else if($renderType == "Avatar") { - $user = users::getUserInfoFromUid($assetID); + $user = Users::GetInfoFromID($assetID); if(!$user) api::respond(200, false, "The user you requested does not exist"); - polygon::requestRender("Avatar", $assetID); + Polygon::RequestRender("Avatar", $assetID); } -users::logStaffAction("[ Render ] Re-rendered $renderType ID $assetID"); +Users::LogStaffAction("[ Render ] Re-rendered $renderType ID $assetID"); api::respond(200, true, "Render request has been successfully submitted! See render status here"); \ No newline at end of file diff --git a/api/admin/upload.php b/api/admin/upload.php index 8410208..b2ed8e5 100644 --- a/api/admin/upload.php +++ b/api/admin/upload.php @@ -1,18 +1,21 @@ - "POST", "admin" => true, "secure" => true]); + "POST", "admin" => [Users::STAFF_CATALOG, Users::STAFF_ADMINISTRATOR], "secure" => true]); $file = $_FILES["file"] ?? false; $name = $_POST["name"] ?? false; $type = $_POST["type"] ?? false; $uploadas = $_POST["creator"] ?? "Polygon"; -$creator = users::getUidFromUserName($uploadas); +$creator = Users::GetIDFromName($uploadas); if(!$file) api::respond(200, false, "You must select a file"); if(!$name) api::respond(200, false, "You must specify a name"); if(strlen($name) > 50) api::respond(200, false, "Name cannot be longer than 50 characters"); if(!$creator) api::respond(400, false, "The user you're trying to create as does not exist"); -if(polygon::filterText($name, false, false, true) != $name) api::respond(400, false, "The name contains inappropriate text"); +if(Polygon::FilterText($name, false, false, true) != $name) api::respond(400, false, "The name contains inappropriate text"); //$lastCreation = $pdo->query("SELECT created FROM assets WHERE creator = 2 ORDER BY id DESC")->fetchColumn(); //if($lastCreation+60 > time()) api::respond(400, false, "Please wait ".(60-(time()-$lastCreation))." seconds before creating a new asset"); @@ -21,72 +24,72 @@ if($type == 1) //image - this is for textures and stuff { if(!in_array($file["type"], ["image/png", "image/jpg", "image/jpeg"])) api::respond(400, false, "Must be a .png or .jpg file"); - polygon::importLibrary("class.upload"); + Polygon::ImportLibrary("class.upload"); $image = new Upload($file); if(!$image->uploaded) api::respond(500, false, "Failed to process image - please contact an admin"); $image->allowed = ['image/png', 'image/jpg', 'image/jpeg']; $image->image_convert = 'png'; - $imageId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); - image::process($image, ["name" => "$imageId", "resize" => false, "dir" => "/asset/files/"]); + $imageId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + Image::Process($image, ["name" => "$imageId", "resize" => false, "dir" => "/asset/files/"]); Thumbnails::UploadAsset($image, $imageId, 60, 62, ["keepRatio" => true, "align" => "C"]); Thumbnails::UploadAsset($image, $imageId, 420, 420, ["keepRatio" => true, "align" => "C"]); } elseif($type == 3) // audio { - if(!in_array($file["type"], ["audio/mpeg", "audio/ogg", "audio/mid", "audio/wav", "video/ogg"])) api::respond(400, false, "Must be an mpeg, wav, ogg or midi audio. - ".$file["type"]); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "audioType" => $file["type"], "approved" => 1]); + if(!in_array($file["type"], ["audio/mpeg", "audio/ogg", "audio/mid", "audio/wav"])) api::respond(400, false, "Must be an mpeg, wav, ogg or midi audio. - ".$file["type"]); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "audioType" => $file["type"], "approved" => 1]); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - image::renderfromimg("audio", $assetId); + Image::RenderFromStaticImage("audio", $assetId); } elseif($type == 4) //mesh { if(!str_ends_with($file["name"], ".mesh")) api::respond(400, false, "Must be a .mesh file"); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - polygon::requestRender("Mesh", $assetId); + Polygon::RequestRender("Mesh", $assetId); } elseif($type == 5) //lua { if(!str_ends_with($file["name"], ".lua")) api::respond(400, false, "Must be a .lua file"); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - image::renderfromimg("Script", $assetId); + Image::RenderFromStaticImage("Script", $assetId); } elseif($type == 8) //hat { if(!str_ends_with($file["name"], ".xml") && !str_ends_with($file["name"], ".rbxm")) api::respond(400, false, "Must be a .rbxm or .xml file"); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - polygon::requestRender("Model", $assetId); + Polygon::RequestRender("Model", $assetId); } elseif($type == 17) //head { if(!str_ends_with($file["name"], ".xml") && !str_ends_with($file["name"], ".rbxm")) api::respond(400, false, "Must be a .rbxm or .xml file"); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - polygon::requestRender("Head", $assetId); + Polygon::RequestRender("Head", $assetId); } elseif($type == 18) //faces are literally just decals lmao (with a minor alteration to the xml) { if(!in_array($file["type"], ["image/png", "image/jpg", "image/jpeg"])) api::respond(400, false, "Must be a .png or .jpg file"); - polygon::importLibrary("class.upload"); + Polygon::ImportLibrary("class.upload"); $image = new Upload($file); if(!$image->uploaded) api::respond(500, false, "Failed to process image - please contact an admin"); $image->allowed = ['image/png', 'image/jpg', 'image/jpeg']; $image->image_convert = 'png'; - $imageId = catalog::createAsset(["type" => 1, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); - image::process($image, ["name" => "$imageId", "resize" => false, "dir" => "/asset/files/"]); + $imageId = Catalog::CreateAsset(["type" => 1, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1]); + Image::Process($image, ["name" => "$imageId", "resize" => false, "dir" => "/asset/files/"]); Thumbnails::UploadAsset($image, $imageId, 60, 62, ["keepRatio" => true, "align" => "C"]); Thumbnails::UploadAsset($image, $imageId, 420, 420, ["keepRatio" => true, "align" => "C"]); - $itemId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "imageID" => $imageId, "approved" => 1]); + $itemId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "imageID" => $imageId, "approved" => 1]); - file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, catalog::generateGraphicXML("Face", $imageId)); + file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, Catalog::GenerateGraphicXML("Face", $imageId)); Thumbnails::UploadAsset($image, $itemId, 420, 230); Thumbnails::UploadAsset($image, $itemId, 420, 420); @@ -101,10 +104,10 @@ elseif($type == 19) //gear { if(!str_ends_with($file["name"], ".xml") && !str_ends_with($file["name"], ".rbxm")) api::respond(400, false, "Must be a .rbxm or .xml file"); - $assetId = catalog::createAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1, "gear_attributes" => '{"melee":false,"powerup":false,"ranged":false,"navigation":false,"explosive":false,"musical":false,"social":false,"transport":false,"building":false}']); + $assetId = Catalog::CreateAsset(["type" => $type, "creator" => $creator, "name" => $name, "description" => "", "approved" => 1, "gear_attributes" => '{"melee":false,"powerup":false,"ranged":false,"navigation":false,"explosive":false,"musical":false,"social":false,"transport":false,"building":false}']); copy($file["tmp_name"], $_SERVER['DOCUMENT_ROOT']."/asset/files/".$assetId); - polygon::requestRender("Model", $assetId); + Polygon::RequestRender("Model", $assetId); } -users::logStaffAction("[ Asset creation ] Created \"$name\" [ID ".($itemId ?? $assetId ?? $imageId)."]"); -api::respond_custom(["status" => 200, "success" => true, "message" => "".catalog::getTypeByNum($type)." successfully created!"]); \ No newline at end of file +Users::LogStaffAction("[ Asset creation ] Created \"$name\" [ID ".($itemId ?? $assetId ?? $imageId)."]"); +api::respond_custom(["status" => 200, "success" => true, "message" => "".Catalog::GetTypeByNum($type)." successfully created!"]); \ No newline at end of file diff --git a/api/catalog/get-comments.php b/api/catalog/get-comments.php index 34ea1bc..f3cf815 100644 --- a/api/catalog/get-comments.php +++ b/api/catalog/get-comments.php @@ -1,5 +1,6 @@ -fetch(PDO::FETCH_OBJ)) "commenter_name" => $row->username, "commenter_id" => $row->author, "commenter_avatar" => Thumbnails::GetAvatar($row->author, 110, 110), - "content" => nl2br(polygon::filterText($row->content)) + "content" => nl2br(Polygon::FilterText($row->content)) ]; } diff --git a/api/catalog/post-comment.php b/api/catalog/post-comment.php index 1909892..10fd74a 100644 --- a/api/catalog/post-comment.php +++ b/api/catalog/post-comment.php @@ -1,5 +1,6 @@ - "POST", "logged_in" => true, "secure" => true]); if(!isset($_POST['assetID']) || !isset($_POST['content'])); @@ -8,7 +9,7 @@ $uid = SESSION["userId"]; $id = $_POST['assetID']; $content = $_POST['content']; -$item = catalog::getItemInfo($id); +$item = Catalog::GetAssetInfo($id); if(!$item) api::respond(400, false, "Asset does not exist"); if(!$item->comments) api::respond(400, false, "Comments are unavailable for this asset"); if(!strlen($content)) api::respond(400, false, "Comment cannot be empty"); @@ -17,8 +18,7 @@ if(strlen($content) > 100) api::respond(400, false, "Comment cannot be longer th $query = $pdo->prepare("SELECT time FROM asset_comments WHERE time+60 > UNIX_TIMESTAMP() AND author = :uid"); $query->bindParam(":uid", $uid, PDO::PARAM_INT); $query->execute(); -$lastComment = $query->fetchColumn(); -if($lastComment) api::respond(400, false, "Please wait ".(60-(time()-$lastComment))." seconds before posting a new comment"); +if($query->rowCount()) api::respond(400, false, "Please wait ".GetReadableTime($query->fetchColumn(), ["RelativeTime" => "1 minute"])." before posting a new comment"); $query = $pdo->prepare("INSERT INTO asset_comments (author, content, assetID, time) VALUES (:uid, :content, :aid, UNIX_TIMESTAMP())"); $query->bindParam(":uid", $uid, PDO::PARAM_INT); diff --git a/api/catalog/purchase.php b/api/catalog/purchase.php index 9a05cbd..4993465 100644 --- a/api/catalog/purchase.php +++ b/api/catalog/purchase.php @@ -1,5 +1,7 @@ - "POST", "logged_in" => true, "secure" => true]); function getPrice($price) @@ -11,12 +13,14 @@ $uid = SESSION["userId"]; $id = $_POST['id'] ?? false; $price = $_POST['price'] ?? 0; -$item = catalog::getItemInfo($id); +$item = Catalog::GetAssetInfo($id); if(!$item) api::respond(400, false, "Asset does not exist"); -if(catalog::ownsAsset($uid, $id)) api::respond(400, false, "User already owns asset"); +if(Catalog::OwnsAsset($uid, $id)) api::respond(400, false, "User already owns asset"); if(!$item->sale) api::respond(400, false, "Asset is off-sale"); if(SESSION["currency"] - $item->price < 0) api::respond(400, false, "User cannot afford asset"); + if($item->price != $price) +{ die(json_encode( [ "status" => 200, @@ -28,12 +32,23 @@ if($item->price != $price) "footer" => 'Your balance after this transaction will be '.(SESSION["currency"] - $item->price), "newprice" => $item->price ])); +} -$query = $pdo->prepare("UPDATE users SET currency = currency - :price WHERE id = :uid; UPDATE users SET currency = currency + :price WHERE id = :seller"); -$query->bindParam(":price", $item->price, PDO::PARAM_INT); -$query->bindParam(":uid", $uid, PDO::PARAM_INT); -$query->bindParam(":seller", $item->creator, PDO::PARAM_INT); -$query->execute(); +$IsAlt = false; + +foreach(Users::GetAlternateAccounts($item->creator) as $alt) +{ + if($alt["userid"] == $uid) $IsAlt = true; +} + +if(!$IsAlt) +{ + $query = $pdo->prepare("UPDATE users SET currency = currency - :price WHERE id = :uid; UPDATE users SET currency = currency + :price WHERE id = :seller"); + $query->bindParam(":price", $item->price, PDO::PARAM_INT); + $query->bindParam(":uid", $uid, PDO::PARAM_INT); + $query->bindParam(":seller", $item->creator, PDO::PARAM_INT); + $query->execute(); +} $query = $pdo->prepare("INSERT INTO ownedAssets (assetId, userId, timestamp) VALUES (:aid, :uid, UNIX_TIMESTAMP())"); $query->bindParam(":aid", $id, PDO::PARAM_INT); @@ -47,6 +62,14 @@ $query->bindParam(":aid", $id, PDO::PARAM_INT); $query->bindParam(":price", $item->price, PDO::PARAM_INT); $query->execute(); +if(time() < strtotime("2021-09-07 00:00:00") && $id == 2692 && !Catalog::OwnsAsset(SESSION["userId"], 2800)) +{ + db::run( + "INSERT INTO ownedAssets (assetId, userId, timestamp) VALUES (2800, :uid, UNIX_TIMESTAMP())", + [":uid" => SESSION["userId"]] + ); +} + die(json_encode( [ "status" => 200, @@ -54,6 +77,6 @@ die(json_encode( "message" => "OK", "header" => "Purchase Complete!", "image" => Thumbnails::GetAsset($item, 110, 110), - "text" => "You have successfully purchased the ".htmlspecialchars($item->name)." ".catalog::getTypeByNum($item->type)." from ".$item->username." for ".getPrice($item->price), + "text" => "You have successfully purchased the ".htmlspecialchars($item->name)." ".Catalog::GetTypeByNum($item->type)." from ".$item->username." for ".getPrice($item->price), "buttons" => [['class' => 'btn btn-primary continue-shopping', 'dismiss' => true, 'text' => 'Continue Shopping']], ])); \ No newline at end of file diff --git a/api/develop/getCreations.php b/api/develop/getCreations.php index 42a70d4..02b99b7 100644 --- a/api/develop/getCreations.php +++ b/api/develop/getCreations.php @@ -1,5 +1,7 @@ - "POST", "logged_in" => true, "secure" => true]); $userid = SESSION["userId"]; @@ -7,7 +9,7 @@ $type = $_POST["type"] ?? false; $page = $_POST["page"] ?? 1; $assets = []; -if(!catalog::getTypeByNum($type)) api::respond(400, false, "Invalid asset type"); +if(!Catalog::GetTypeByNum($type)) api::respond(400, false, "Invalid asset type"); $query = $pdo->prepare("SELECT * FROM assets WHERE creator = :uid AND type = :type ORDER BY id DESC"); $query->bindParam(":uid", $userid, PDO::PARAM_INT); @@ -16,7 +18,7 @@ $query->execute(); while($asset = $query->fetch(PDO::FETCH_OBJ)) { - $info = catalog::getItemInfo($asset->id); + $info = Catalog::GetAssetInfo($asset->id); $assets[] = [ diff --git a/api/develop/upload.php b/api/develop/upload.php index 283d7a9..76c6cf2 100644 --- a/api/develop/upload.php +++ b/api/develop/upload.php @@ -1,5 +1,8 @@ - "POST", "logged_in" => true, "secure" => true]); $userid = SESSION["userId"]; @@ -7,17 +10,17 @@ $file = $_FILES["file"] ?? false; $name = $_POST["name"] ?? false; $type = $_POST["type"] ?? false; -if(!$file) api::respond(400, false, "You must select a file"); -if(!in_array($file["type"], ["image/png", "image/jpg", "image/jpeg"])) api::respond(400, false, "Must be a .png or .jpg file"); -if(!$name) api::respond(400, false, "You must specify a name"); -if(polygon::filterText($name, false, false, true) != $name) api::respond(400, false, "The name contains inappropriate text"); -if(!in_array($type, [2, 11, 12, 13])) api::respond(400, false, "You can't upload that type of content!"); +if(!$file) api::respond(200, false, "You must select a file"); +if(!in_array($file["type"], ["image/png", "image/jpg", "image/jpeg"])) api::respond(200, false, "Must be a .png or .jpg file"); +if(!$name) api::respond(200, false, "You must specify a name"); +if(Polygon::IsExplicitlyFiltered($name)) api::respond(200, false, "The name contains inappropriate text"); +if(!in_array($type, [2, 11, 12, 13])) api::respond(200, false, "You can't upload that type of content!"); $query = $pdo->prepare("SELECT created FROM assets WHERE creator = :uid ORDER BY id DESC"); $query->bindParam(":uid", $userid, PDO::PARAM_INT); $query->execute(); $lastCreation = $query->fetchColumn(); -if($lastCreation+30 > time()) api::respond(400, false, "Please wait ".(30-(time()-$lastCreation))." seconds before creating a new asset"); +if($lastCreation+30 > time()) api::respond(200, false, "Please wait ".(30-(time()-$lastCreation))." seconds before creating a new asset"); // tshirts are a bit messy but straightforward: // the image asset itself must be 128x128 with the texture resized to preserve aspect ratio @@ -57,35 +60,35 @@ if($lastCreation+30 > time()) api::respond(400, false, "Please wait ".(30-(time( // Decal/Face |yes (s)| |yes (s)| yes (s) | yes (s) | | yes (s) | yes (s) | yes (s) | yes (s) | // +-------+-------+-------+---------+---------+---------+---------+---------+---------+---------+ -polygon::importLibrary("class.upload"); +Polygon::ImportLibrary("class.upload"); $image = new Upload($file); if(!$image->uploaded) api::respond(200, false, "Failed to process image - please contact an admin"); $image->allowed = ['image/png', 'image/jpg', 'image/jpeg']; $image->image_convert = 'png'; -$imageId = catalog::createAsset(["type" => 1, "creator" => SESSION["userId"], "name" => $name, "description" => catalog::getTypeByNum($type)." Image"]); +$imageId = Catalog::CreateAsset(["type" => 1, "creator" => SESSION["userId"], "name" => $name, "description" => Catalog::GetTypeByNum($type)." Image"]); if($type == 2) //tshirt { - image::process($image, ["name" => "$imageId", "keepRatio" => true, "align" => "T", "x" => 128, "y" => 128, "dir" => "/asset/files/"]); + Image::Process($image, ["name" => "$imageId", "keepRatio" => true, "align" => "T", "x" => 128, "y" => 128, "dir" => "/asset/files/"]); Thumbnails::UploadAsset($image, $imageId, 60, 62, ["keepRatio" => true, "align" => "T"]); Thumbnails::UploadAsset($image, $imageId, 420, 420, ["keepRatio" => true, "align" => "T"]); - $itemId = catalog::createAsset(["type" => 2, "creator" => SESSION["userId"], "name" => $name, "description" => "T-Shirt", "imageID" => $imageId]); + $itemId = Catalog::CreateAsset(["type" => 2, "creator" => SESSION["userId"], "name" => $name, "description" => "T-Shirt", "imageID" => $imageId]); - file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, catalog::generateGraphicXML("T-Shirt", $imageId)); + file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, Catalog::GenerateGraphicXML("T-Shirt", $imageId)); //process initial tshirt thumbnail $template = imagecreatefrompng($_SERVER['DOCUMENT_ROOT']."/img/tshirt-template.png"); - $shirtdecal = image::resize(SITE_CONFIG['paths']['thumbs_assets']."/$imageId-420x420.png", 250, 250); + $shirtdecal = Image::Resize(SITE_CONFIG['paths']['thumbs_assets']."/$imageId-420x420.png", 250, 250); imagesavealpha($template, true); imagesavealpha($shirtdecal, true); - image::merge($template, $shirtdecal, 85, 85, 0, 0, 250, 250, 100); + Image::MergeLayers($template, $shirtdecal, 85, 85, 0, 0, 250, 250, 100); imagepng($template, SITE_CONFIG['paths']['thumbs_assets']."/$itemId-420x420.png"); - image::resize(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-420x420.png", 100, 100, SITE_CONFIG['paths']['thumbs_assets']."/$itemId-100x100.png"); - image::resize(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-420x420.png", 110, 110, SITE_CONFIG['paths']['thumbs_assets']."/$itemId-110x110.png"); + Image::Resize(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-420x420.png", 100, 100, SITE_CONFIG['paths']['thumbs_assets']."/$itemId-100x100.png"); + Image::Resize(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-420x420.png", 110, 110, SITE_CONFIG['paths']['thumbs_assets']."/$itemId-110x110.png"); Thumbnails::UploadToCDN(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-100x100.png"); Thumbnails::UploadToCDN(SITE_CONFIG['paths']['thumbs_assets']."/$itemId-110x110.png"); @@ -93,31 +96,31 @@ if($type == 2) //tshirt } elseif($type == 11 || $type == 12) //shirt / pants { - image::process($image, ["name" => "$imageId", "x" => 585, "y" => 559, "dir" => "/asset/files/"]); + Image::Process($image, ["name" => "$imageId", "x" => 585, "y" => 559, "dir" => "/asset/files/"]); Thumbnails::UploadAsset($image, $imageId, 60, 62, ["keepRatio" => true, "align" => "C"]); Thumbnails::UploadAsset($image, $imageId, 420, 420, ["keepRatio" => true, "align" => "C"]); - $itemId = catalog::createAsset(["type" => $type, "creator" => SESSION["userId"], "name" => $name, "description" => catalog::getTypeByNum($type), "imageID" => $imageId]); - file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, catalog::generateGraphicXML(catalog::getTypeByNum($type), $imageId)); - polygon::requestRender("Clothing", $itemId); + $itemId = Catalog::CreateAsset(["type" => $type, "creator" => SESSION["userId"], "name" => $name, "description" => Catalog::GetTypeByNum($type), "imageID" => $imageId]); + file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, Catalog::GenerateGraphicXML(Catalog::GetTypeByNum($type), $imageId)); + Polygon::RequestRender("Clothing", $itemId); } elseif($type == 13) //decal { - image::process($image, ["name" => "$imageId", "x" => 256, "scaleY" => true, "dir" => "/asset/files/"]); + Image::Process($image, ["name" => "$imageId", "x" => 256, "scaleY" => true, "dir" => "/asset/files/"]); Thumbnails::UploadAsset($image, $imageId, 60, 62, ["keepRatio" => true, "align" => "C"]); Thumbnails::UploadAsset($image, $imageId, 420, 420, ["keepRatio" => true, "align" => "C"]); - $itemId = catalog::createAsset(["type" => 13, "creator" => SESSION["userId"], "name" => $name, "description" => "Decal", "imageID" => $imageId]); + $itemId = Catalog::CreateAsset(["type" => 13, "creator" => SESSION["userId"], "name" => $name, "description" => "Decal", "imageID" => $imageId]); - file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, catalog::generateGraphicXML("Decal", $imageId)); - image::process($image, ["name" => "$itemId-48x48.png", "x" => 48, "y" => 48, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-75x75.png", "x" => 75, "y" => 75, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-100x100.png", "x" => 100, "y" => 100, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-110x110.png", "x" => 110, "y" => 110, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-250x250.png", "x" => 250, "y" => 250, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-352x352.png", "x" => 352, "y" => 352, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-420x230.png", "x" => 420, "y" => 230, "dir" => "/thumbs/assets/"]); - image::process($image, ["name" => "$itemId-420x420.png", "x" => 420, "y" => 420, "dir" => "/thumbs/assets/"]); + file_put_contents(SITE_CONFIG['paths']['assets'].$itemId, Catalog::GenerateGraphicXML("Decal", $imageId)); + Thumbnails::UploadAsset($image, $itemId, 48, 48); + Thumbnails::UploadAsset($image, $itemId, 75, 75); + Thumbnails::UploadAsset($image, $itemId, 100, 100); + Thumbnails::UploadAsset($image, $itemId, 110, 110); + Thumbnails::UploadAsset($image, $itemId, 250, 250); + Thumbnails::UploadAsset($image, $itemId, 352, 352); + Thumbnails::UploadAsset($image, $itemId, 420, 230); + Thumbnails::UploadAsset($image, $itemId, 420, 420); } -api::respond_custom(["status" => 200, "success" => true, "message" => catalog::getTypeByNum($type)." successfully created!"]); \ No newline at end of file +api::respond_custom(["status" => 200, "success" => true, "message" => Catalog::GetTypeByNum($type)." successfully created!"]); \ No newline at end of file diff --git a/api/discord/check-verification.php b/api/discord/check-verification.php new file mode 100644 index 0000000..dee9537 --- /dev/null +++ b/api/discord/check-verification.php @@ -0,0 +1,25 @@ + "GET", "api" => "DiscordBot"]); + +if (isset($_GET["Token"]) && isset($_GET["DiscordID"])) +{ + $userInfo = db::run("SELECT * FROM users WHERE discordKey = :key", [":key" => $_GET["Token"]])->fetch(PDO::FETCH_OBJ); + if (!$userInfo) api::respond(200, false, "InvalidKey"); // check if verification key is valid + if ($userInfo->discordID != NULL) api::respond(200, false, "AlreadyVerified"); // check if mercury account is already verified + + db::run( + "UPDATE users SET discordID = :id, discordVerifiedTime = UNIX_TIMESTAMP() WHERE discordKey = :key", + [":id" => $_GET["DiscordID"], ":key" => $_GET["Token"]] + ); + + api::respond(200, true, $userInfo->username); +} +else if (isset($_GET["DiscordID"])) +{ + $username = db::run("SELECT username FROM users WHERE discordID = :id", [":id" => $_GET["DiscordID"]]); + if (!$username->rowCount()) api::respond(200, false, "NotVerified"); // check if discord account is already verified + api::respond(200, true, $username->fetchColumn()); +} + +api::respond(400, false, "Bad Request"); \ No newline at end of file diff --git a/api/discord/whois.php b/api/discord/whois.php new file mode 100644 index 0000000..182f205 --- /dev/null +++ b/api/discord/whois.php @@ -0,0 +1,28 @@ + "GET", "api" => "DiscordBot"]); + +if (isset($_GET["UserName"])) +{ + $userInfo = db::run( + "SELECT id, username, blurb, adminlevel, jointime, lastonline, discordID FROM users WHERE username = :name", + [":name" => $_GET["UserName"]] + )->fetch(PDO::FETCH_OBJ); + if (!$userInfo) api::respond(200, false, "DoesntExist"); +} +else if (isset($_GET["DiscordID"])) +{ + $userInfo = db::run( + "SELECT id, username, blurb, adminlevel, jointime, lastonline, discordID FROM users WHERE discordID = :id", + [":id" => $_GET["DiscordID"]] + )->fetch(PDO::FETCH_OBJ); + if (!$userInfo) api::respond(200, false, "NotVerified"); +} +else +{ + api::respond(400, false, "Bad Request"); +} + +$userInfo->blurb = str_ireplace(["@everyone", "@here"], ["[everyone]", "[here]"], $userInfo->blurb); +$userInfo->blurb = preg_replace("/<(@[0-9]+)>/i", "[$1]", $userInfo->blurb); +api::respond(200, true, $userInfo); \ No newline at end of file diff --git a/api/friends/getFriendRequests.php b/api/friends/getFriendRequests.php index 1fbc6f0..4ed29b6 100644 --- a/api/friends/getFriendRequests.php +++ b/api/friends/getFriendRequests.php @@ -1,5 +1,6 @@ - "POST", "logged_in" => true, "secure" => true]); $userid = SESSION["userId"]; @@ -25,7 +26,7 @@ while($row = $query->fetch(PDO::FETCH_OBJ)) { $friends[] = [ - "username" => users::getUserNameFromUid($row->requesterId), + "username" => Users::GetNameFromID($row->requesterId), "userid" => $row->requesterId, "avatar" => Thumbnails::GetAvatar($row->requesterId, 250, 250), "friendid" => $row->id diff --git a/api/friends/getFriends.php b/api/friends/getFriends.php index 9311d6b..730f855 100644 --- a/api/friends/getFriends.php +++ b/api/friends/getFriends.php @@ -1,5 +1,6 @@ - "POST"]); $url = $_SERVER['HTTP_REFERER'] ?? false; @@ -9,7 +10,7 @@ $order = strpos($url, "/home") ? "lastonline DESC" : "id"; $limit = strpos($url, "/friends") ? 18 : 6; $self = str_ends_with($url, "/user") || str_ends_with($url, "/friends") || strpos($url, "/home"); -if(!users::getUserInfoFromUid($userId)) api::respond(400, false, "User does not exist"); +if(!Users::GetInfoFromID($userId)) api::respond(400, false, "User does not exist"); $query = $pdo->prepare("SELECT COUNT(*) FROM friends WHERE :uid IN (requesterId, receiverId) AND status = 1"); $query->bindParam(":uid", $userId, PDO::PARAM_INT); @@ -18,7 +19,7 @@ $query->execute(); $pages = ceil($query->fetchColumn()/$limit); $offset = ($page - 1)*$limit; -if(!$pages) api::respond(200, true, ($self ? "You do" : users::getUserNameFromUid($userId)." does")."n't have any friends"); +if(!$pages) api::respond(200, true, ($self ? "You do" : Users::GetNameFromID($userId)." does")."n't have any friends"); $query = $pdo->prepare(" SELECT friends.*, users.username, users.id AS userId, users.status, users.lastonline FROM friends @@ -40,7 +41,7 @@ while($row = $query->fetch(PDO::FETCH_OBJ)) "userid" => $row->userId, "avatar" => Thumbnails::GetAvatar($row->userId, 250, 250), "friendid" => $row->id, - "status" => polygon::filterText($row->status) + "status" => Polygon::FilterText($row->status) ]; } diff --git a/api/games/getServers.php b/api/games/getServers.php index e49f698..79d19fa 100644 --- a/api/games/getServers.php +++ b/api/games/getServers.php @@ -1,6 +1,8 @@ - "POST"]); + "POST", "logged_in" => true]); $client = $_POST["client"] ?? "false"; $creator = $_POST["creator"] ?? false; @@ -40,13 +42,14 @@ while($server = $servers->fetch(PDO::FETCH_OBJ)) { $gears = []; foreach(json_decode($server->allowed_gears, true) as $gear_attr => $gear_val) - if($gear_val) $gears[] = ["name" => catalog::$gear_attr_display[$gear_attr]["text_sel"], "icon" => catalog::$gear_attr_display[$gear_attr]["icon"]]; + if($gear_val) $gears[] = ["name" => Catalog::$GearAttributesDisplay[$gear_attr]["text_sel"], "icon" => Catalog::$GearAttributesDisplay[$gear_attr]["icon"]]; $items[] = [ - "server_name" => polygon::filterText($server->name), + "server_name" => Polygon::FilterText($server->name), + "server_description" => strlen($server->description) ? Polygon::FilterText($server->description) : "No description available.", "server_id" => $server->id, "server_thumbnail" => Thumbnails::GetAvatar($server->hoster, 420, 420), - "hoster_name" => users::getUserNameFromUid($server->hoster), + "hoster_name" => Users::GetNameFromID($server->hoster), "hoster_id" => $server->hoster, "date" => date('n/d/Y g:i:s A', $server->created), "version" => $server->version, diff --git a/api/games/serverlauncher.php b/api/games/serverlauncher.php index ce9b378..7fb85fd 100644 --- a/api/games/serverlauncher.php +++ b/api/games/serverlauncher.php @@ -49,14 +49,17 @@ $query->bindParam(":sid", $serverID, PDO::PARAM_INT); $query->bindParam(":teleport", $isTeleport, PDO::PARAM_INT); $query->execute(); +$Protocol = "https"; +if($serverInfo->version == 2009) $Protocol = "http"; + api::respond_custom([ "status" => 200, "success" => true, "message" => "OK", "version" => $serverInfo->version, - "joinScriptUrl" => "http://chef.pizzaboxer.xyz/game/join?ticket=".$ticket, + "joinScriptUrl" => "{$Protocol}://{$_SERVER['HTTP_HOST']}/game/join?ticket={$ticket}", // these last few params are for teleportservice and lack any function - just ignore - "authenticationUrl" => "http://chef.pizzaboxer.xyz/Login/Negotiate.ashx", - "authenticationTicket" => "unusedplzignore", + "authenticationUrl" => "{$Protocol}://{$_SERVER['HTTP_HOST']}/Login/Negotiate.ashx", + "authenticationTicket" => "0", "status" => 2 ]); \ No newline at end of file diff --git a/api/groups/admin/get-members.php b/api/groups/admin/get-members.php new file mode 100644 index 0000000..0a086b5 --- /dev/null +++ b/api/groups/admin/get-members.php @@ -0,0 +1,52 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(isset($_POST["Page"]) && !is_numeric($_POST["Page"])) api::respond(400, false, "Page is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$Page = $_POST["Page"] ?? 1; +$Members = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +$Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); + +if($Rank->Level == 0) api::respond(200, false, "You are not a member of this group"); +if(!$Rank->Permissions->CanManageGroupAdmin) api::respond(200, false, "You are not allowed to perform this action"); + +$MemberCount = db::run( + "SELECT COUNT(*) FROM groups_members + WHERE GroupID = :GroupID AND Rank < :RankLevel AND NOT Pending", + [":GroupID" => $GroupID, ":RankLevel" => $Rank->Level] +)->fetchColumn(); + +$Pages = ceil($MemberCount/12); +$Offset = ($Page - 1)*12; + +if(!$Pages) api::respond(200, true, "This group does not have any members."); + +$MembersQuery = db::run( + "SELECT users.username, users.id, Rank FROM groups_members + INNER JOIN users ON users.id = groups_members.UserID + WHERE GroupID = :GroupID AND Rank < :RankLevel AND NOT Pending + ORDER BY Joined DESC LIMIT 12 OFFSET $Offset", + [":GroupID" => $GroupID, ":RankLevel" => $Rank->Level] +); + +while($Member = $MembersQuery->fetch(PDO::FETCH_OBJ)) +{ + $Members[] = + [ + "UserName" => $Member->username, + "UserID" => $Member->id, + "RoleLevel" => $Member->Rank, + "Avatar" => Thumbnails::GetAvatar($Member->id, 250, 250) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "pages" => $Pages, "count" => $MemberCount, "items" => $Members])); \ No newline at end of file diff --git a/api/groups/admin/get-roles.php b/api/groups/admin/get-roles.php new file mode 100644 index 0000000..b611d77 --- /dev/null +++ b/api/groups/admin/get-roles.php @@ -0,0 +1,44 @@ + "POST"]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$Roles = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +$Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); + +if($Rank->Level == 0) api::respond(200, false, "You are not a member of this group"); +if(!$Rank->Permissions->CanManageGroupAdmin) api::respond(200, false, "You are not allowed to perform this action"); + +if($Rank->Level == 255) +{ + $RolesQuery = db::run( + "SELECT * FROM groups_ranks WHERE GroupID = :GroupID ORDER BY Rank ASC", + [":GroupID" => $GroupID] + ); +} +else +{ + $RolesQuery = db::run( + "SELECT * FROM groups_ranks WHERE GroupID = :GroupID AND Rank < :MyRank ORDER BY Rank ASC", + [":GroupID" => $GroupID, ":MyRank" => $Rank->Level] + ); +} + +while($Role = $RolesQuery->fetch(PDO::FETCH_OBJ)) +{ + $Roles[] = + [ + "Name" => htmlspecialchars($Role->Name), + "Description" => htmlspecialchars($Role->Description), + "Rank" => $Role->Rank, + "Permissions" => json_decode($Role->Permissions) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "items" => $Roles])); \ No newline at end of file diff --git a/api/groups/admin/request-relationship.php b/api/groups/admin/request-relationship.php new file mode 100644 index 0000000..83b05e6 --- /dev/null +++ b/api/groups/admin/request-relationship.php @@ -0,0 +1,110 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Recipient"])) api::respond(400, false, "Recipient is not set"); + +if(!isset($_POST["Type"])) api::respond(400, false, "Type is not set"); +if(!in_array($_POST["Type"], ["ally", "enemy"])) api::respond(400, false, "Type is not valid"); + +$GroupID = $_POST["GroupID"] ?? false; +$RecipientName = $_POST["Recipient"] ?? false; +$Type = $_POST["Type"] ?? false; +$Groups = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +$Recipient = db::run("SELECT * FROM groups WHERE name = :GroupName", [":GroupName" => $RecipientName]); +$RecipientInfo = $Recipient->fetch(PDO::FETCH_OBJ); + +if(!$Recipient->rowCount()) api::respond(200, false, "No group with that name exists"); + +$MyRank = Groups::GetUserRank(SESSION["userId"], $GroupID); +if(!$MyRank->Permissions->CanManageRelationships) api::respond(200, false, "You are not allowed to manage this group's relationships"); + +if($RecipientInfo->id == $GroupID) +{ + if($Type == "ally") api::respond(200, false, "You cannot send an ally request to your own group"); + else if($Type == "enemy") api::respond(200, false, "You cannot declare your own group as an enemy"); +} + +$Relationship = db::run( + "SELECT * FROM groups_relationships WHERE :GroupID IN (Declarer, Recipient) AND :Recipient IN (Declarer, Recipient) AND Status != 2", + [":GroupID" => $GroupID, ":Recipient" => $RecipientInfo->id] +); +$RelationshipInfo = $Relationship->fetch(PDO::FETCH_OBJ); + +if($Relationship->rowCount()) +{ + if($RelationshipInfo->Type == "Allies") + { + if($RelationshipInfo->Status == 0) + { + if($RelationshipInfo->Declarer == $GroupID) + { + api::respond(200, false, "You already have an outgoing ally request to this group"); + } + else + { + api::respond(200, false, "You already have an incoming ally request from this group"); + } + } + else if($RelationshipInfo->Status == 1) + { + api::respond(200, false, "You are already allies with this group!"); + } + } + else if($RelationshipInfo->Type == "Enemies") + { + api::respond(200, false, "You are already enemies with this group!"); + } +} + +if($Type == "ally") +{ + $LastRequest = db::run("SELECT Declared FROM groups_relationships WHERE Declarer = :GroupID AND Declared+3600 > UNIX_TIMESTAMP()", [":GroupID" => $GroupID]); + if($LastRequest->rowCount()) + api::respond(429, false, "Please wait ".GetReadableTime($LastRequest->fetchColumn(), ["RelativeTime" => "1 hour"])." before sending a new ally request"); + + db::run( + "INSERT INTO groups_relationships (Type, Declarer, Recipient, Status, Declared) + VALUES (\"Allies\", :GroupID, :Recipient, 0, UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":Recipient" => $RecipientInfo->id] + ); + + Groups::LogAction( + $GroupID, "Send Ally Request", + sprintf( + "%s sent an ally request to %s", + SESSION["userId"], SESSION["userName"], $RecipientInfo->id, htmlspecialchars($RecipientInfo->name) + ) + ); + api::respond(200, true, "Ally request has been sent to ".Polygon::FilterText($RecipientInfo->name)); +} +else if($Type == "enemy") +{ + $LastRequest = db::run("SELECT Declared FROM groups_relationships WHERE Declarer = :GroupID AND Declared+3600 > UNIX_TIMESTAMP()", [":GroupID" => $GroupID]); + if($LastRequest->rowCount()) + api::respond(429, false, "Please wait ".GetReadableTime($LastRequest->fetchColumn(), ["RelativeTime" => "1 hour"])." before sending a new ally request"); + + db::run( + "INSERT INTO groups_relationships (Type, Declarer, Recipient, Status, Declared, Established) + VALUES (\"Enemies\", :GroupID, :Recipient, 1, UNIX_TIMESTAMP(), UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":Recipient" => $RecipientInfo->id] + ); + + Groups::LogAction( + $GroupID, "Create Enemy", + sprintf( + "%s declared %s as an enemy", + SESSION["userId"], SESSION["userName"], $RecipientInfo->id, htmlspecialchars($RecipientInfo->name) + ) + ); + api::respond(200, true, Polygon::FilterText($RecipientInfo->name)." is now your enemy!"); +} + +api::respond(200, false, "An unexpected error occurred"); \ No newline at end of file diff --git a/api/groups/admin/update-member.php b/api/groups/admin/update-member.php new file mode 100644 index 0000000..70c30d8 --- /dev/null +++ b/api/groups/admin/update-member.php @@ -0,0 +1,57 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["UserID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["UserID"])) api::respond(400, false, "GroupID is not a number"); + +if(isset($_POST["RoleLevel"]) && !is_numeric($_POST["RoleLevel"])) api::respond(400, false, "RoleLevel is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$UserID = $_POST["UserID"] ?? false; + +$RoleLevel = $_POST["RoleLevel"] ?? false; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +$MyRole = Groups::GetUserRank(SESSION["userId"], $GroupID); +$UserRole = Groups::GetUserRank($UserID, $GroupID); + +if($MyRole->Level == 0) api::respond(200, false, "You are not a member of this group"); +if(!$MyRole->Permissions->CanManageGroupAdmin) api::respond(200, false, "You are not allowed to perform this action"); +if($UserRole->Level == 0) api::respond(200, false, "That user is not a member of this group"); + +if($RoleLevel !== false) +{ + if(!Groups::GetRankInfo($GroupID, $RoleLevel)) api::respond(200, false, "That role does not exist"); + if($RoleLevel == 0 || $RoleLevel == 255) api::respond(200, false, "That role cannot be manually assigned to a member"); + + if($UserRole->Level == $RoleLevel) api::respond(200, false, "The role you tried to assign is the user's current role"); + if($MyRole->Level <= $RoleLevel) api::respond(200, false, "You can only assign roles lower than yours"); + if($MyRole->Level <= $UserRole->Level) api::respond(200, false, "You can only modify the role of a user who is a role lower than yours"); + + db::run( + "UPDATE groups_members SET Rank = :RoleLevel WHERE GroupID = :GroupID AND UserID = :UserID", + [":GroupID" => $GroupID, ":UserID" => $UserID, ":RoleLevel" => $RoleLevel] + ); + + $UserName = Users::GetNameFromID($UserID); + $RoleName = Groups::GetRankInfo($GroupID, $RoleLevel)->Name; + $Action = $RoleLevel > $UserRole->Level ? "promoted" : "demoted"; + + Groups::LogAction( + $GroupID, "Change Rank", + sprintf( + "%s %s %s from %s to %s", + SESSION["userId"], SESSION["userName"], $Action, $UserID, $UserName, htmlspecialchars($UserRole->Name), htmlspecialchars($RoleName) + ) + ); + + api::respond(200, true, "$UserName has been $Action to " . htmlspecialchars($RoleName)); +} + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/groups/admin/update-relationship.php b/api/groups/admin/update-relationship.php new file mode 100644 index 0000000..9f043c5 --- /dev/null +++ b/api/groups/admin/update-relationship.php @@ -0,0 +1,104 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Recipient"])) api::respond(400, false, "Recipient is not set"); +if(!is_numeric($_POST["Recipient"])) api::respond(400, false, "Recipient is not a number"); + +if(!isset($_POST["Action"])) api::respond(400, false, "Action is not set"); +if(!in_array($_POST["Action"], ["accept", "decline"])) api::respond(400, false, "Action is not valid"); + +$GroupID = $_POST["GroupID"] ?? false; +$Recipient = $_POST["Recipient"] ?? false; +$Action = $_POST["Action"] ?? false; +$Groups = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +if(!Groups::GetGroupInfo($Recipient)) api::respond(200, false, "Recipient group does not exist"); + +$MyRank = Groups::GetUserRank(SESSION["userId"], $GroupID); +if(!$MyRank->Permissions->CanManageRelationships) api::respond(200, false, "You are not allowed to manage this group's relationships"); + +$Relationship = db::run( + "SELECT groups_relationships.*, groups.name FROM groups_relationships + INNER JOIN groups ON groups.id = (CASE WHEN Declarer = :GroupID THEN Recipient ELSE Declarer END) + WHERE :GroupID IN (Declarer, Recipient) AND :Recipient IN (Declarer, Recipient) AND Status != 2", + [":GroupID" => $GroupID, ":Recipient" => $Recipient] +); +$RelationshipInfo = $Relationship->fetch(PDO::FETCH_OBJ); + +if(!$Relationship->rowCount()) api::respond(200, false, "You are not in a relationship with this group"); + +if($Action == "accept") +{ + if($RelationshipInfo->Type == "Enemies") api::respond(200, false, "You cannot accept an enemy relationship"); + if($RelationshipInfo->Status != 0) api::respond(200, false, "You are already in a relationship with this group"); + + db::run( + "UPDATE groups_relationships SET Status = 1, Established = UNIX_TIMESTAMP() WHERE ID = :RelationshipID", + [":RelationshipID" => $RelationshipInfo->ID] + ); + + Groups::LogAction( + $GroupID, "Accept Ally Request", + sprintf( + "%s accepted an ally request from %s", + SESSION["userId"], SESSION["userName"], $Recipient, htmlspecialchars($RelationshipInfo->name) + ) + ); + + api::respond(200, true, "You have accepted {$RelationshipInfo->name}'s ally request"); +} +else if($Action == "decline") +{ + db::run( + "UPDATE groups_relationships SET Status = 2, Broken = UNIX_TIMESTAMP() WHERE ID = :RelationshipID", + [":RelationshipID" => $RelationshipInfo->ID] + ); + + if($RelationshipInfo->Type == "Allies") + { + if($RelationshipInfo->Status == 0) + { + Groups::LogAction( + $GroupID, "Decline Ally Request", + sprintf( + "%s declined an ally request from %s", + SESSION["userId"], SESSION["userName"], $Recipient, htmlspecialchars($RelationshipInfo->name) + ) + ); + + api::respond(200, true, "You have declined ".Polygon::FilterText($RelationshipInfo->name)."'s ally request"); + } + else if($RelationshipInfo->Status == 1) + { + Groups::LogAction( + $GroupID, "Delete Ally", + sprintf( + "%s removed %s as an ally", + SESSION["userId"], SESSION["userName"], $Recipient, htmlspecialchars($RelationshipInfo->name) + ) + ); + + api::respond(200, true, "You are no longer allies with ".Polygon::FilterText($RelationshipInfo->name)); + } + } + else if($RelationshipInfo->Type == "Enemies") + { + Groups::LogAction( + $GroupID, "Delete Enemy", + sprintf( + "%s removed %s as an enemy", + SESSION["userId"], SESSION["userName"], $Recipient, htmlspecialchars($RelationshipInfo->name) + ) + ); + + api::respond(200, true, "You are no longer enemies with ".Polygon::FilterText($RelationshipInfo->name)); + } +} + +api::respond(200, false, "An unexpected error occurred"); \ No newline at end of file diff --git a/api/groups/admin/update-roles.php b/api/groups/admin/update-roles.php new file mode 100644 index 0000000..98a3998 --- /dev/null +++ b/api/groups/admin/update-roles.php @@ -0,0 +1,167 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Roles"])) api::respond(400, false, "Roles is not set"); + +$GroupID = $_POST["GroupID"]; +$Roles = json_decode($_POST["Roles"]); + +if(!$Roles) api::respond(400, false, "Roles is not valid JSON"); +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +$MyRole = Groups::GetUserRank(SESSION["userId"], $GroupID); + +if($MyRole->Level == 0) api::respond(200, false, "You are not a member of this group"); +if($MyRole->Level != 255) api::respond(200, false, "You are not allowed to perform this action"); + +function FindRolesWithRank($Rank) +{ + global $Roles; + $Count = 0; + + foreach ($Roles as $Role) + { + if (!isset($Role->Rank)) continue; + if ($Role->Rank == $Rank) $Count += 1; + } + + return $Count; +} + +function FindRoleWithRank($Rank) +{ + global $Roles; + + foreach ($Roles as $Role) + { + if (!isset($Role->Rank)) continue; + if ($Role->Rank == $Rank) return $Role; + } + + return false; +} + +$Permissions = +[ + "CanViewGroupWall", + "CanViewGroupStatus", + "CanPostOnGroupWall", + "CanPostGroupStatus", + "CanDeleteGroupWallPosts", + "CanAcceptJoinRequests", + "CanKickLowerRankedMembers", + "CanRoleLowerRankedMembers", + "CanManageRelationships", + "CanCreateAssets", + "CanConfigureAssets", + "CanSpendFunds", + "CanManageGames", + "CanManageGroupAdmin", + "CanViewAuditLog" +]; + +if(FindRolesWithRank(0) == 0) api::respond(200, false, "You can not remove the Guest role"); +if(FindRolesWithRank(255) == 0) api::respond(200, false, "You can not remove the Owner role"); +if(count($Roles) < 3) api::respond(200, false, "There must be at least three roles"); +if(count($Roles) > 10) api::respond(200, false, "There must be no more than ten roles"); + +foreach($Roles as $Role) +{ + if(!isset($Role->Name) || !isset($Role->Description) || !isset($Role->Rank) || !isset($Role->Permissions)) + api::respond(200, false, "Roles are missing parameters"); + + if($Role->Rank < 0 || $Role->Rank > 255) api::respond(200, false, "Each role must have a rank number between 0 and 255"); + if(FindRolesWithRank($Role->Rank) > 1) api::respond(200, false, "Each role must have a unique rank number"); + + $CurrentRole = Groups::GetRankInfo($GroupID, $Role->Rank); + + if($CurrentRole === false) $Role->Action = "Create"; + else $Role->Action = "Update"; + + if($Role->Rank == 0) + { + if($Role->Name != $CurrentRole->Name || $Role->Description != $CurrentRole->Description) + api::respond(200, false, "You can not modify the Guest role"); + } + + if($Role->Rank == 255 && $Role->Permissions != $CurrentRole->Permissions) + api::respond(200, false, "You can not modify the permissions of the Owner role"); + + if(strlen($Role->Name) < 3) api::respond(200, false, "Role names must be at least 3 characters long"); + if(strlen($Role->Name) > 15) api::respond(200, false, "Role names must be no longer than 15 characters"); + + if(strlen($Role->Description) < 3) api::respond(200, false, "Role description must at least 3 characters long"); + if(strlen($Role->Description) > 64) api::respond(200, false, "Role description must be no longer than 64 characters"); + + foreach ($Permissions as $Permission) + { + if(!isset($Role->Permissions->$Permission)) api::respond(200, false, "Role is missing a permission"); + if(!is_bool($Role->Permissions->$Permission)) api::respond(200, false, "Role permission property must have a boolean value"); + } + + if(count((array)$Role->Permissions) != count($Permissions)) api::respond(200, false, "Role permissions contains an incorrect number of permissions"); +} + +foreach($Roles as $Role) +{ + if($Role->Action == "Create") + { + // if(SESSION["userId"] == 1) echo "Creating Role {$Role->Rank}\r\n"; + + db::run( + "INSERT INTO groups_ranks (GroupID, Name, Description, Rank, Permissions, Created) + VALUES (:GroupID, :Name, :Description, :Rank, :Permissions, UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":Name" => $Role->Name, ":Description" => $Role->Description, ":Rank" => $Role->Rank, ":Permissions" => json_encode($Role->Permissions)] + ); + } +} + +$GroupRoles = Groups::GetGroupRanks($GroupID, true); +while($ExistingRole = $GroupRoles->fetch(PDO::FETCH_OBJ)) +{ + $Role = FindRoleWithRank($ExistingRole->Rank); + + if($Role == false) + { + // if(SESSION["userId"] == 1) echo "Deleting Role {$ExistingRole->Rank}\r\n"; + + // for this one we gotta move the members with a role thats being deleted to the lowest rank + // slight issue with this is for a brief period, members assigned the role thats being deleted + // will have no role - if the timing is just right this could mess up the view of the group page + + // delete the rank by the oldest id - so that we dont accidentally delete the new one + db::run( + "DELETE FROM groups_ranks WHERE GroupID = :GroupID AND Rank = :Rank ORDER BY id ASC LIMIT 1", + [":GroupID" => $GroupID, ":Rank" => $ExistingRole->Rank] + ); + + $NewRank = db::run( + "SELECT Rank FROM polygon.groups_ranks WHERE GroupID = :GroupID AND Rank != 0 ORDER BY Rank ASC LIMIT 1", + [":GroupID" => $GroupID] + )->fetchColumn(); + + // if(SESSION["userId"] == 1) echo "Updating existing members to {$NewRank}\r\n"; + + db::run( + "UPDATE groups_members SET Rank = :NewRank WHERE GroupID = :GroupID AND Rank = :Rank", + [":GroupID" => $GroupID, ":Rank" => $ExistingRole->Rank, ":NewRank" => $NewRank] + ); + } + else if(isset($Role->Action) && $Role->Action == "Update") + { + // if(SESSION["userId"] == 1) echo "Updating Role {$Role->Rank}\r\n"; + + db::run( + "UPDATE groups_ranks SET Name = :Name, Description = :Description, Permissions = :Permissions + WHERE GroupID = :GroupID AND Rank = :Rank", + [":GroupID" => $GroupID, ":Name" => $Role->Name, ":Description" => $Role->Description, ":Rank" => $Role->Rank, ":Permissions" => json_encode($Role->Permissions)] + ); + } +} + +die(json_encode(["status" => 200, "success" => true, "message" => "Group roles have successfully been updated"])); \ No newline at end of file diff --git a/api/groups/delete-wall-post.php b/api/groups/delete-wall-post.php new file mode 100644 index 0000000..506eb12 --- /dev/null +++ b/api/groups/delete-wall-post.php @@ -0,0 +1,40 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["PostID"])) api::respond(400, false, "PostID is not set"); +if(!is_numeric($_POST["PostID"])) api::respond(400, false, "PostID is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$PostID = $_POST["PostID"] ?? false; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +$Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); +if(!$Rank->Permissions->CanDeleteGroupWallPosts) api::respond(200, false, "You are not allowed to delete wall posts on this group"); + +$PostInfo = db::run( + "SELECT * FROM groups_wall WHERE id = :PostID AND :GroupID = :GroupID", + [":PostID" => $PostID, ":GroupID" => $GroupID] +)->fetch(PDO::FETCH_OBJ); + +if(!$PostInfo) api::respond(200, false, "Wall post does not exist"); + +Groups::LogAction( + $GroupID, "Delete Post", + sprintf( + "%s deleted post \"%s\" by %s", + SESSION["userId"], SESSION["userName"], htmlspecialchars($PostInfo->Content), $PostInfo->PosterID, Users::GetNameFromID($PostInfo->PosterID) + ) +); + +db::run( + "DELETE FROM groups_wall WHERE id = :PostID AND :GroupID = :GroupID", + [":PostID" => $PostID, ":GroupID" => $GroupID] +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/groups/get-audit.php b/api/groups/get-audit.php new file mode 100644 index 0000000..060e586 --- /dev/null +++ b/api/groups/get-audit.php @@ -0,0 +1,75 @@ + "POST"]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(isset($_POST["Page"]) && !is_numeric($_POST["Page"])) api::respond(400, false, "Page is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$Filter = $_POST["Filter"] ?? "All Actions"; +$Page = $_POST["Page"] ?? 1; +$Logs = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +$MyRank = Groups::GetUserRank(SESSION["userId"] ?? 0, $GroupID); +if(!$MyRank->Permissions->CanViewAuditLog) api::respond(200, false, "You cannot audit this group"); + +if($Filter == "All Actions") +{ + $LogCount = db::run( + "SELECT COUNT(*) FROM groups_audit WHERE GroupID = :GroupID", + [":GroupID" => $GroupID] + )->fetchColumn(); +} +else +{ + $LogCount = db::run( + "SELECT COUNT(*) FROM groups_audit WHERE GroupID = :GroupID AND Category = :Action", + [":GroupID" => $GroupID, ":Action" => $Filter] + )->fetchColumn(); +} + +$Pages = ceil($LogCount/20); +$Offset = ($Page - 1)*20; + +if(!$Pages) api::respond(200, true, "This group does not have any logs for this action."); + +if($Filter == "All Actions") +{ + $LogsQuery = db::run( + "SELECT groups_audit.*, users.username FROM groups_audit + INNER JOIN users ON users.id = UserId + WHERE GroupID = :GroupID + ORDER BY Time DESC LIMIT 20 OFFSET $Offset", + [":GroupID" => $GroupID] + ); +} +else +{ + $LogsQuery = db::run( + "SELECT groups_audit.*, users.username FROM groups_audit + INNER JOIN users ON users.id = UserId + WHERE GroupID = :GroupID AND Category = :Action + ORDER BY Time DESC LIMIT 20 OFFSET $Offset", + [":GroupID" => $GroupID, ":Action" => $Filter] + ); +} + +while($Log = $LogsQuery->fetch(PDO::FETCH_OBJ)) +{ + $Logs[] = + [ + "Date" => date('j/n/y G:i', $Log->Time), + "UserName" => $Log->username, + "UserID" => $Log->UserID, + "UserAvatar" => Thumbnails::GetAvatar($Log->UserID, 250, 250), + "Rank" => Polygon::FilterText($Log->Rank), + "Description" => Polygon::FilterText($Log->Description, false) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "pages" => $Pages, "items" => $Logs])); \ No newline at end of file diff --git a/api/groups/get-members.php b/api/groups/get-members.php new file mode 100644 index 0000000..b5107ea --- /dev/null +++ b/api/groups/get-members.php @@ -0,0 +1,52 @@ + "POST"]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["RankLevel"])) api::respond(400, false, "RankLevel is not set"); +if(!is_numeric($_POST["RankLevel"])) api::respond(400, false, "RankLevel is not a number"); + +if(isset($_POST["Page"]) && !is_numeric($_POST["Page"])) api::respond(400, false, "Page is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$RankID = $_POST["RankLevel"] ?? false; +$Page = $_POST["Page"] ?? 1; +$Members = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +if(!Groups::GetRankInfo($GroupID, $RankID)) api::respond(200, false, "Group rank does not exist"); + +$MemberCount = db::run( + "SELECT COUNT(*) FROM groups_members WHERE GroupID = :GroupID AND Rank = :RankID AND NOT Pending", + [":GroupID" => $GroupID, ":RankID" => $RankID] +)->fetchColumn(); + +$Pages = ceil($MemberCount/12); +$Offset = ($Page - 1)*12; + +if(!$Pages) api::respond(200, true, "This group does not have any members of this rank."); + +$MembersQuery = db::run( + "SELECT users.username, users.id, Rank FROM groups_members + INNER JOIN users ON users.id = groups_members.UserID + WHERE GroupID = :GroupID AND Rank = :RankID AND NOT Pending + ORDER BY Joined DESC LIMIT 12 OFFSET $Offset", + [":GroupID" => $GroupID, ":RankID" => $RankID] +); + +while($Member = $MembersQuery->fetch(PDO::FETCH_OBJ)) +{ + $Members[] = + [ + "UserName" => $Member->username, + "UserID" => $Member->id, + "RoleLevel" => $Member->Rank, + "Avatar" => Thumbnails::GetAvatar($Member->id, 250, 250) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "pages" => $Pages, "count" => $MemberCount, "items" => $Members])); \ No newline at end of file diff --git a/api/groups/get-related.php b/api/groups/get-related.php new file mode 100644 index 0000000..6cffe24 --- /dev/null +++ b/api/groups/get-related.php @@ -0,0 +1,82 @@ + "POST"]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Type"])) api::respond(400, false, "Type is not set"); +if(!in_array($_POST["Type"], ["Pending Allies", "Allies", "Enemies"])) api::respond(400, false, "Type is not valid"); + +if(isset($_POST["Page"]) && !is_numeric($_POST["Page"])) api::respond(400, false, "Page is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$Type = $_POST["Type"] ?? false; +$Page = $_POST["Page"] ?? 1; +$Groups = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +if($Type == "Pending Allies") +{ + if(!SESSION) api::respond(200, false, "You are not allowed to get this group's pending allies"); + $MyRank = Groups::GetUserRank(SESSION["userId"], $GroupID); + if(!$MyRank->Permissions->CanManageRelationships) api::respond(200, false, "You are not allowed to get this group's pending allies"); + + $GroupsCount = db::run( + "SELECT COUNT(*) FROM groups_relationships WHERE Recipient = :GroupID AND Type = \"Allies\" AND Status = 0", + [":GroupID" => $GroupID] + )->fetchColumn(); +} +else +{ + $GroupsCount = db::run( + "SELECT COUNT(*) FROM groups_relationships WHERE :GroupID IN (Declarer, Recipient) AND Type = :Type AND Status = 1", + [":GroupID" => $GroupID, ":Type" => $Type] + )->fetchColumn(); +} + +$Pages = ceil($GroupsCount/12); +$Offset = ($Page - 1)*12; + +if(!$Pages) api::respond(200, true, "This group does not have any $Type"); + +if($Type == "Pending Allies") +{ + $GroupsQuery = db::run( + "SELECT groups.name, groups.id, groups.emblem, + (SELECT COUNT(*) FROM groups_members WHERE GroupID = groups.id AND NOT Pending) AS MemberCount + FROM groups_relationships + INNER JOIN groups ON groups.id = (CASE WHEN Declarer = :GroupID THEN Recipient ELSE Declarer END) + WHERE Recipient = :GroupID AND Type = \"Allies\" AND Status = 0 + ORDER BY Declared DESC LIMIT 12 OFFSET $Offset", + [":GroupID" => $GroupID] + ); +} +else +{ + $GroupsQuery = db::run( + "SELECT groups.name, groups.id, groups.emblem, + (SELECT COUNT(*) FROM groups_members WHERE GroupID = groups.id AND NOT Pending) AS MemberCount + FROM groups_relationships + INNER JOIN groups ON groups.id = (CASE WHEN Declarer = :GroupID THEN Recipient ELSE Declarer END) + WHERE :GroupID IN (Declarer, Recipient) AND Type = :Type AND Status = 1 + ORDER BY Established DESC LIMIT 12 OFFSET $Offset", + [":GroupID" => $GroupID, ":Type" => $Type] + ); +} + +while($Group = $GroupsQuery->fetch(PDO::FETCH_OBJ)) +{ + $Groups[] = + [ + "Name" => Polygon::FilterText($Group->name), + "ID" => $Group->id, + "MemberCount" => $Group->MemberCount, + "Emblem" => Thumbnails::GetAssetFromID($Group->emblem, 420, 420) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "pages" => $Pages, "items" => $Groups])); \ No newline at end of file diff --git a/api/groups/get-wall.php b/api/groups/get-wall.php new file mode 100644 index 0000000..591d673 --- /dev/null +++ b/api/groups/get-wall.php @@ -0,0 +1,53 @@ + "POST"]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(isset($_POST["Page"]) && !is_numeric($_POST["Page"])) api::respond(400, false, "Page is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$Page = $_POST["Page"] ?? 1; +$Wall = []; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +if(SESSION) $Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); +else $Rank = Groups::GetRankInfo($GroupID, 0); + +if(!$Rank->Permissions->CanViewGroupWall) api::respond(200, false, "You are not allowed to view this group wall"); + +$PostCount = db::run( + "SELECT COUNT(*) FROM groups_wall WHERE GroupID = :GroupID AND NOT Deleted", + [":GroupID" => $GroupID] +)->fetchColumn(); + +$Pages = ceil($PostCount/15); +$Offset = ($Page - 1)*15; + +if(!$Pages) api::respond(200, true, "This group does not have any wall posts."); + +$PostQuery = db::run( + "SELECT groups_wall.id, users.username AS PosterName, PosterID, Content, TimePosted FROM groups_wall + INNER JOIN users ON users.id = PosterID WHERE GroupID = :GroupID AND NOT Deleted + ORDER BY TimePosted DESC LIMIT 15 OFFSET $Offset", + [":GroupID" => $GroupID] +); + +while($Post = $PostQuery->fetch(PDO::FETCH_OBJ)) +{ + $Wall[] = + [ + "id" => $Post->id, + "username" => $Post->PosterName, + "userid" => $Post->PosterID, + "content" => nl2br(Polygon::FilterText($Post->Content)), + "time" => date('j/n/Y g:i:s A', $Post->TimePosted), + "avatar" => Thumbnails::GetAvatar($Post->PosterID, 420, 420) + ]; +} + +die(json_encode(["status" => 200, "success" => true, "message" => "OK", "pages" => $Pages, "count" => $PostCount, "items" => $Wall])); \ No newline at end of file diff --git a/api/groups/join-group.php b/api/groups/join-group.php new file mode 100644 index 0000000..d2d5708 --- /dev/null +++ b/api/groups/join-group.php @@ -0,0 +1,30 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); +if(Groups::CheckIfUserInGroup(SESSION["userId"], $GroupID)) api::respond(200, false, "You are already in this group"); + +if(Groups::GetUserGroups(SESSION["userId"])->rowCount() >= 20) api::respond(200, false, "You have reached the maximum number of groups"); + +$RateLimit = db::run("SELECT Joined FROM groups_members WHERE UserID = :UserID AND Joined+300 > UNIX_TIMESTAMP()", [":UserID" => SESSION["userId"]]); +if($RateLimit->rowCount()) + api::respond(200, false, "Please wait ".GetReadableTime($RateLimit->fetchColumn(), ["RelativeTime" => "5 minutes"])." before joining a new group"); + +$RankLevel = db::run( + "SELECT Rank FROM groups_ranks WHERE GroupID = :GroupID AND Rank != 0 ORDER BY Rank ASC LIMIT 1", + [":GroupID" => $GroupID] +)->fetchColumn(); + +db::run( + "INSERT INTO groups_members (GroupID, UserID, Rank, Joined) VALUES (:GroupID, :UserID, :RankLevel, UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"], ":RankLevel" => $RankLevel] +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/groups/leave-group.php b/api/groups/leave-group.php new file mode 100644 index 0000000..b758a78 --- /dev/null +++ b/api/groups/leave-group.php @@ -0,0 +1,21 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +$GroupID = $_POST["GroupID"] ?? false; +$GroupInfo = Groups::GetGroupInfo($GroupID); + +if(!$GroupInfo) api::respond(200, false, "Group does not exist"); +if($GroupInfo->creator == SESSION["userId"]) api::respond(200, false, "You are the creator of this group"); +if(!Groups::CheckIfUserInGroup(SESSION["userId"], $GroupID)) api::respond(200, false, "You are not in this group"); + +db::run( + "DELETE FROM groups_members WHERE GroupID = :GroupID AND UserID = :UserID", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"]] +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/groups/post-shout.php b/api/groups/post-shout.php new file mode 100644 index 0000000..ef13bbe --- /dev/null +++ b/api/groups/post-shout.php @@ -0,0 +1,56 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Content"])) api::respond(400, false, "Content is not set"); + +$GroupID = $_POST["GroupID"] ?? false; +$Content = $_POST["Content"] ?? false; +$GroupInfo = Groups::GetGroupInfo($GroupID); + +if(!$GroupInfo) api::respond(200, false, "Group does not exist"); + +$Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); + +if(!$Rank->Permissions->CanPostGroupStatus) api::respond(200, false, "You are not allowed to post on this group wall"); + +if(strlen($Content) < 3) api::respond(200, false, "Group shout must be at least 3 characters long"); +if(strlen($Content) > 255) api::respond(200, false, "Group shout can not be longer than 64 characters"); + +$LastPost = db::run( + "SELECT timestamp FROM feed WHERE groupId = :GroupID AND userId = :UserID AND timestamp+300 > UNIX_TIMESTAMP()", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"]] +); + +if($LastPost->rowCount()) + api::respond(200, false, "Please wait ".GetReadableTime($LastPost->fetchColumn(), ["RelativeTime" => "5 minutes"])." before posting a group shout"); + +Groups::LogAction( + $GroupID, "Post Shout", + sprintf( + "%s changed the group status to: %s", + SESSION["userId"], SESSION["userName"], htmlspecialchars($Content) + ) +); + +db::run( + "INSERT INTO feed (groupId, userId, text, timestamp) VALUES (:GroupID, :UserID, :Content, UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"], ":Content" => $Content] +); + +Discord::SendToWebhook( + [ + "username" => $GroupInfo->name, + "content" => $Content."\n(Posted by ".SESSION["userName"].")", + "avatar_url" => Thumbnails::GetAssetFromID($GroupInfo->emblem, 420, 420) + ], + Discord::WEBHOOK_KUSH +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/groups/post-wall.php b/api/groups/post-wall.php new file mode 100644 index 0000000..a75822b --- /dev/null +++ b/api/groups/post-wall.php @@ -0,0 +1,38 @@ + "POST", "logged_in" => true, "secure" => true]); + +if(!isset($_POST["GroupID"])) api::respond(400, false, "GroupID is not set"); +if(!is_numeric($_POST["GroupID"])) api::respond(400, false, "GroupID is not a number"); + +if(!isset($_POST["Content"])) api::respond(400, false, "Content is not set"); + +$GroupID = $_POST["GroupID"] ?? false; +$Content = $_POST["Content"] ?? false; + +if(!Groups::GetGroupInfo($GroupID)) api::respond(200, false, "Group does not exist"); + +$Rank = Groups::GetUserRank(SESSION["userId"], $GroupID); + +if(!$Rank->Permissions->CanPostOnGroupWall) api::respond(200, false, "You are not allowed to post on this group wall"); + +if(strlen($Content) < 3) api::respond(200, false, "Wall post must be at least 3 characters long"); +if(strlen($Content) > 255) api::respond(200, false, "Wall post can not be longer than 255 characters"); + +$LastPost = db::run( + "SELECT TimePosted FROM groups_wall + WHERE GroupID = :GroupID AND PosterID = :UserID AND TimePosted+60 > UNIX_TIMESTAMP() + ORDER BY TimePosted DESC LIMIT 1", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"]] +); + +if(SESSION["userId"] != 1 && $LastPost->rowCount()) + api::respond(200, false, "Please wait ".(60-(time()-$LastPost->fetchColumn()))." seconds before posting a new wall post"); + +db::run( + "INSERT INTO groups_wall (GroupID, PosterID, Content, TimePosted) VALUES (:GroupID, :UserID, :Content, UNIX_TIMESTAMP())", + [":GroupID" => $GroupID, ":UserID" => SESSION["userId"], ":Content" => $Content] +); + +api::respond(200, true, "OK"); \ No newline at end of file diff --git a/api/ide/toolbox.php b/api/ide/toolbox.php index 56b6f49..a26dcb5 100644 --- a/api/ide/toolbox.php +++ b/api/ide/toolbox.php @@ -1,5 +1,6 @@ -"Bricks", @@ -92,7 +93,7 @@ $query->execute();
- fetch(PDO::FETCH_OBJ)) { $name = polygon::filterText($row->name); ?> + fetch(PDO::FETCH_OBJ)) { $name = Polygon::FilterText($row->name); ?> <?=$name?> diff --git a/api/private/components/Auth.php b/api/private/components/Auth.php new file mode 100644 index 0000000..a5e725f --- /dev/null +++ b/api/private/components/Auth.php @@ -0,0 +1,40 @@ +plaintext, $this->key); + } + + function VerifyPassword($storedtext) + { + if(strpos($storedtext, "$2y$10") !== false) //standard bcrypt - used since 04/09/2020 + return password_verify($this->plaintext, $storedtext); + elseif(strpos($storedtext, "def50200") !== false) //argon2id w/ encryption - used since 26/02/2021 + return \ParagonIE\PasswordLock\PasswordLock::decryptAndVerify($this->plaintext, $storedtext, $this->key); + } + + function UpdatePassword($userId) + { + $pwhash = $this->createPassword(); + db::run("UPDATE users SET password = :hash, lastpwdchange = UNIX_TIMESTAMP() WHERE id = :id", [":hash" => $pwhash, ":id" => $userId]); + } + + function __construct($plaintext) + { + if(!class_exists('Defuse\Crypto\Key')) Polygon::ImportLibrary("PasswordLock"); + $this->plaintext = $plaintext; + $this->key = \Defuse\Crypto\Key::loadFromAsciiSafeString(SITE_CONFIG["keys"]["passwordEncryption"]); + } +} \ No newline at end of file diff --git a/api/private/components/Catalog.php b/api/private/components/Catalog.php new file mode 100644 index 0000000..30c034e --- /dev/null +++ b/api/private/components/Catalog.php @@ -0,0 +1,137 @@ + "Image", // (internal use only - this is used for asset images) + 2 => "T-Shirt", + 3 => "Audio", + 4 => "Mesh", // (internal use only) + 5 => "Lua", // (internal use only - use this for corescripts and linkedtool scripts) + 6 => "HTML", // (deprecated - dont use) + 7 => "Text", // (deprecated - dont use) + 8 => "Hat", + 9 => "Place", // (unused as of now) + 10 => "Model", + 11 => "Shirt", + 12 => "Pants", + 13 => "Decal", + 16 => "Avatar", // (deprecated - dont use) + 17 => "Head", + 18 => "Face", + 19 => "Gear", + 21 => "Badge" // (unused as of now) + ]; + + static function GetTypeByNum($type) + { + return self::$types[$type] ?? false; + } + + public static array $GearAttributesDisplay = + [ + "melee" => ["text_sel" => "Melee", "text_item" => "Melee Weapon", "icon" => "far fa-sword"], + "powerup" => ["text_sel" => "Power ups", "text_item" => "Power Up", "icon" => "far fa-arrow-alt-up"], + "ranged" => ["text_sel" => "Ranged", "text_item" => "Ranged Weapon", "icon" => "far fa-bow-arrow"], + "navigation" => ["text_sel" => "Navigation", "text_item" => "Melee", "icon" => "far fa-compass"], + "explosive" => ["text_sel" => "Explosives", "text_item" => "Explosive", "icon" => "far fa-bomb"], + "musical" => ["text_sel" => "Musical", "text_item" => "Musical", "icon" => "far fa-music"], + "social" => ["text_sel" => "Social", "text_item" => "Social Item", "icon" => "far fa-laugh"], + "transport" => ["text_sel" => "Transport", "text_item" => "Personal Transport", "icon" => "far fa-motorcycle"], + "building" => ["text_sel" => "Building", "text_item" => "Melee", "icon" => "far fa-hammer"] + ]; + + public static array $GearAttributes = + [ + "melee" => false, + "powerup" => false, + "ranged" => false, + "navigation" => false, + "explosive" => false, + "musical" => false, + "social" => false, + "transport" => false, + "building" => false + ]; + + static function ParseGearAttributes() + { + $gears = self::$GearAttributes; + foreach($gears as $gear => $enabled) $gears[$gear] = isset($_POST["gear_$gear"]) && $_POST["gear_$gear"] == "on"; + self::$GearAttributes = $gears; + } + + static function GetAssetInfo($id) + { + return db::run( + "SELECT assets.*, users.username, + (SELECT COUNT(*) FROM ownedAssets WHERE assetId = assets.id AND userId != assets.creator) AS sales_total, + (SELECT COUNT(*) FROM ownedAssets WHERE assetId = assets.id AND userId != assets.creator AND timestamp > :sda) AS sales_week + FROM assets INNER JOIN users ON creator = users.id WHERE assets.id = :id", + [":sda" => strtotime('7 days ago', time()), ":id" => $id])->fetch(PDO::FETCH_OBJ); + } + + static function CreateAsset($options) + { + global $pdo; + $columns = array_keys($options); + + $querystring = "INSERT INTO assets (".implode(", ", $columns).", created, updated) "; + array_walk($columns, function(&$value, $_){ $value = ":$value"; }); + $querystring .= "VALUES (".implode(", ", $columns).", UNIX_TIMESTAMP(), UNIX_TIMESTAMP())"; + + $query = $pdo->prepare($querystring); + foreach($options as $option => $val) $query->bindParam(":$option", $options[$option], is_numeric($val) ? PDO::PARAM_INT : PDO::PARAM_STR); + $query->execute(); + + $aid = $pdo->lastInsertId(); + $uid = $options["creator"] ?? SESSION["userId"]; + + db::run("INSERT INTO ownedAssets (assetId, userId, timestamp) VALUES (:aid, :uid, UNIX_TIMESTAMP())", [":aid" => $aid, ":uid" => $uid]); + + return $aid; + } + + static function OwnsAsset($uid, $aid) + { + return db::run("SELECT COUNT(*) FROM ownedAssets WHERE assetId = :aid AND userId = :uid", [":aid" => $aid, ":uid" => $uid])->fetchColumn(); + } + + static function GenerateGraphicXML($type, $assetID) + { + $strings = + [ + "T-Shirt" => ["class" => "ShirtGraphic", "contentName" => "Graphic", "stringName" => "Shirt Graphic"], + "Decal" => ["class" => "Decal", "contentName" => "Texture", "stringName" => "Decal"], + "Face" => ["class" => "Decal", "contentName" => "Texture", "stringName" => "face"], + "Shirt" => ["class" => "Shirt", "contentName" => "ShirtTemplate", "stringName" => "Shirt"], + "Pants" => ["class" => "Pants", "contentName" => "PantsTemplate", "stringName" => "Pants"] + ]; + ob_start(); ?> + + null + nil + " referent="RBX0"> + + + 5 + + 20 + 0 + + %ASSETURL% + + + "> + %ASSETURL% + + + + true + + + + "https://discord.com/api/v8/users/$UserID", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => ["Authorization: Bot"] + ]); + + $response = curl_exec($ch); + $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if ($httpcode != 200) return false; + + $response = json_decode($response); + if ($response == NULL) return false; + + return (object) + [ + "username" => $response->username, + "tag" => $response->discriminator, + "id" => $response->id, + "avatar" => "https://cdn.discordapp.com/avatars/{$response->id}/{$response->avatar}.png", + "color" => $response->accent_color, + "banner" => $response->banner, + "banner_color" => $response->banner_color + ]; + } + + static function SendToWebhook($Payload, $Webhook, $EscapeContent = true) + { + // example payload: + // $payload = ["username" => "test", "content" => "test", "avatar_url" => "https://polygon.pizzaboxer.xyz/thumbs/avatar?id=1&x=100&y=100"]; + + if($EscapeContent) + { + $Payload["content"] = str_ireplace(["\\", "`"], ["\\\\", "\\`"], $Payload["content"]); + $Payload["content"] = str_ireplace(["@everyone", "@here"], ["`@everyone`", "`@here`"], $Payload["content"]); + $Payload["content"] = preg_replace("/(<@[0-9]+>)/i", "`$1`", $Payload["content"]); + } + + $ch = curl_init(); + + curl_setopt($ch, CURLOPT_URL, $Webhook); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['payload_json' => json_encode($Payload)])); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + + $response = curl_exec($ch); + curl_close($ch); + + return $response; + } +} \ No newline at end of file diff --git a/api/private/components/ErrorHandler.php b/api/private/components/ErrorHandler.php new file mode 100644 index 0000000..d67f02a --- /dev/null +++ b/api/private/components/ErrorHandler.php @@ -0,0 +1,115 @@ +Type == "Exception") + { + $VerboseMessage .= sprintf("Fatal Error: Uncaught Exception: %s in %s:%d\n", $this->Exception->getMessage(), $this->Exception->getFile(), $this->Exception->getLine()); + $VerboseMessage .= "Stack trace:\n"; + $VerboseMessage .= sprintf("%s\n", $this->Exception->getTraceAsString()); + $VerboseMessage .= sprintf(" thrown in %s on line %d", $this->Exception->getFile(), $this->Exception->getLine()); + } + else + { + $VerboseMessage .= sprintf("%s: %s in %s on line %s", $this->Type, $this->String, $this->File, $this->Line); + } + + return $VerboseMessage; + } + + private function WriteLog() + { + $LogFile = $_SERVER['DOCUMENT_ROOT']."/api/private/ErrorLog.json"; + $LogID = generateUUID(); + + if(!file_exists($LogFile)) file_put_contents($LogFile, "[]"); + + $Log = json_decode(file_get_contents($LogFile), true); + + $Log[$LogID] = + [ + "Timestamp" => time(), + "GETParameters" => $_GET, + "Message" => $this->GetVerboseMessage() + ]; + + file_put_contents($LogFile, json_encode($Log)); + + return $LogID; + } + + public function HandleError($Type, $String, $File, $Line) + { + $this->Type = $this->GetType($Type); + $this->String = $String; + $this->File = $File; + $this->Line = $Line; + + $LogID = $this->WriteLog(); + + if(headers_sent()) + { + die("An unexpected error occurred! More info: $LogID"); + } + else + { + redirect("/error?id=$LogID"); + } + } + + public function HandleException($Exception) + { + $this->Type = "Exception"; + $this->Exception = $Exception; + + $LogID = $this->WriteLog(); + + if(headers_sent()) + { + die("An unexpected error occurred! More info: $LogID"); + } + else + { + redirect("/error?id=$LogID"); + } + } + + public function __construct() + { + set_error_handler([$this, "HandleError"]); + set_exception_handler([$this, "HandleException"]); + } + + public static function GetLog($LogID = false) + { + $LogFile = $_SERVER['DOCUMENT_ROOT']."/api/private/ErrorLog.json"; + if(!file_exists($LogFile)) file_put_contents($LogFile, "[]"); + + $Log = json_decode(file_get_contents($LogFile), true); + + if($LogID !== false) return $Log[$LogID] ?? false; + return $Log; + } +} \ No newline at end of file diff --git a/api/private/components/Forum.php b/api/private/components/Forum.php new file mode 100644 index 0000000..7cb4bf7 --- /dev/null +++ b/api/private/components/Forum.php @@ -0,0 +1,89 @@ + $id])->fetch(PDO::FETCH_OBJ); + } + + static function GetReplyInfo($id) + { + return db::run("SELECT * FROM forum_replies WHERE id = :id", [":id" => $id])->fetch(PDO::FETCH_OBJ); + } + + static function GetThreadReplies($id) + { + return db::run("SELECT COUNT(*) FROM forum_replies WHERE threadId = :id AND NOT deleted", [":id" => $id])->fetchColumn() ?: "-"; + } + + static function GetSubforumInfo($id) + { + return db::run("SELECT * FROM forum_subforums WHERE id = :id", [":id" => $id])->fetch(PDO::FETCH_OBJ); + } + + static function GetSubforumThreadCount($id, $includeReplies = false) + { + $threads = db::run("SELECT COUNT(*) FROM forum_threads WHERE subforumid = :id", [":id" => $id])->fetchColumn(); + if(!$includeReplies) return $threads ?: '-'; + + $replies = db::run("SELECT COUNT(*) from forum_replies WHERE threadId IN (SELECT id FROM forum_threads WHERE subforumid = :id)", [":id" => $id])->fetchColumn(); + $total = $threads + $replies; + + return $total ?: '-'; + } +} + +class pagination +{ + // this is ugly and sucks + // really this is only for the forums + // everything else uses standard next and back pagination + + public static int $page = 1; + public static int $pages = 1; + public static string $url = '/'; + public static array $pager = [1 => 1, 2 => 1, 3 => 1]; + + public static function initialize() + { + self::$pager[1] = self::$page-1; self::$pager[2] = self::$page; self::$pager[3] = self::$page+1; + + if(self::$page <= 2){ self::$pager[1] = self::$page; self::$pager[2] = self::$page+1; self::$pager[3] = self::$page+2; } + if(self::$page == 1){ self::$pager[1] = self::$page+1; } + + if(self::$page >= self::$pages-1){ self::$pager[1] = self::$pages-3; self::$pager[2] = self::$pages-2; self::$pager[3] = self::$pages-1; } + if(self::$page == self::$pages){ self::$pager[1] = self::$pages-1; self::$pager[2] = self::$pages-2; } + if(self::$page == self::$pages-1){ self::$pager[1] = self::$pages-2; self::$pager[2] = self::$pages-1; } + } + + public static function insert() + { + if(self::$pages <= 1) return; + ?> + + UNIX_TIMESTAMP() AND serverID = selfhosted_servers.id AND valid) AS players, + (ping+35 > UNIX_TIMESTAMP()) AS online + FROM selfhosted_servers INNER JOIN users ON users.id = hoster WHERE selfhosted_servers.id = :id", [":id" => $id])->fetch(PDO::FETCH_OBJ); + } + + static function GetPlayersInServer($serverID) + { + return db::run(" + SELECT users.* FROM selfhosted_servers + INNER JOIN client_sessions ON client_sessions.ping+35 > UNIX_TIMESTAMP() AND serverID = selfhosted_servers.id AND valid + INNER JOIN users ON users.id = uid + WHERE selfhosted_servers.id = :id GROUP BY client_sessions.uid", [":id" => $serverID]); + } +} \ No newline at end of file diff --git a/api/private/components/Groups.php b/api/private/components/Groups.php new file mode 100644 index 0000000..a4c4274 --- /dev/null +++ b/api/private/components/Groups.php @@ -0,0 +1,162 @@ + $GroupID])->fetch(PDO::FETCH_OBJ); + } + else + { + $GroupInfo = db::run( + "SELECT groups.*, + (SELECT COUNT(*) FROM groups_members WHERE GroupID = :id AND NOT Pending) AS MemberCount, + users.username AS ownername FROM groups + INNER JOIN users ON users.id = groups.owner + WHERE groups.id = :id", + [":id" => $GroupID] + )->fetch(PDO::FETCH_OBJ); + } + + if(!$Force && $GroupInfo && $GroupInfo->deleted) return false; + return $GroupInfo; + } + + static function GetGroupStatus($GroupID) + { + return db::run( + "SELECT feed.*, users.username FROM feed + INNER JOIN users ON users.id = feed.userId + WHERE groupId = :GroupID ORDER BY id DESC LIMIT 1", + [":GroupID" => $GroupID] + )->fetch(PDO::FETCH_OBJ); + } + + static function GetLastGroupUserJoined($UserID) + { + $GroupID = db::run( + "SELECT GroupID FROM groups_members WHERE UserID = :UserID ORDER BY Joined DESC LIMIT 1", + [":UserID" => $UserID] + )->fetchColumn(); + + return self::GetGroupInfo($GroupID); + } + + static function GetRankInfo($GroupID, $RankLevel) + { + $RankInfo = db::run( + "SELECT * FROM groups_ranks WHERE GroupID = :GroupID AND Rank = :RankLevel", + [":GroupID" => $GroupID, ":RankLevel" => $RankLevel] + )->fetch(PDO::FETCH_OBJ); + + if(!$RankInfo) return false; + + return (object) [ + "Name" => $RankInfo->Name, + "Description" => $RankInfo->Description, + "Level" => $RankInfo->Rank, + "Permissions" => json_decode($RankInfo->Permissions) + ]; + } + + static function GetGroupRanks($GroupID, $includeGuest = false) + { + if($includeGuest) + return db::run("SELECT * FROM groups_ranks WHERE GroupID = :id ORDER BY Rank ASC", [":id" => $GroupID]); + else + return db::run("SELECT * FROM groups_ranks WHERE GroupID = :id AND Rank != 0 ORDER BY Rank ASC", [":id" => $GroupID]); + } + + static function CheckIfUserInGroup($UserID, $GroupID) + { + return db::run( + "SELECT * FROM groups_members WHERE UserID = :UserID AND GroupID = :GroupID", + [":UserID" => $UserID, ":GroupID" => $GroupID] + )->rowCount(); + } + + static function GetUserRank($UserID, $GroupID) + { + $RankLevel = db::run( + "SELECT Rank FROM groups_members WHERE UserID = :UserID And GroupID = :GroupID", + [":UserID" => $UserID, ":GroupID" => $GroupID] + )->fetchColumn(); + + if(!$RankLevel) return self::GetRankInfo($GroupID, 0); + + return self::GetRankInfo($GroupID, $RankLevel); + } + + static function GetUserGroups($UserID) + { + return db::run( + "SELECT groups.* FROM groups_members + INNER JOIN groups ON groups.id = groups_members.GroupID + WHERE groups_members.UserID = :UserID + ORDER BY groups_members.Joined DESC", + [":UserID" => $UserID] + ); + } + + static function LogAction($GroupID, $Category, $Description) + { + // small note: when using this, you gotta be very careful about what you pass into the description + // the description must be sanitized when inserted into the db, not when fetched from an api + // this is because the description may contain hyperlinks or other html elements + // also here's a list of categories: + + // Delete Post + // Remove Member + // Accept Join Request + // Decline Join Request + // Post Shout + // Change Rank + // Buy Ad + // Send Ally Request + // Create Enemy + // Accept Ally Request + // Decline Ally Request + // Delete Ally + // Delete Enemy + // Add Group Place + // Delete Group Place + // Create Items + // Configure Items + // Spend Group Funds + // Change Owner + // Delete + // Adjust Currency Amounts + // Abandon + // Claim + // Rename + // Change Description + // Create Group Asset + // Update Group Asset + // Configure Group Asset + // Revert Group Asset + // Create Group Developer Product + // Configure Group Game + // Lock + // Unlock + // Create Pass + // Create Badge + // Configure Badge + // Save Place + // Publish Place + // Invite to Clan + // Kick from Clan + // Cancel Clan Invite + // Buy Clan + + if(!SESSION) return false; + $MyRank = self::GetUserRank(SESSION["userId"], $GroupID); + + db::run( + "INSERT INTO groups_audit (GroupID, Category, Time, UserID, Rank, Description) + VALUES (:GroupID, :Category, UNIX_TIMESTAMP(), :UserID, :Rank, :Description)", + [":GroupID" => $GroupID, ":Category" => $Category, ":UserID" => SESSION["userId"], ":Rank" => $MyRank->Name, ":Description" => $Description] + ); + } +} \ No newline at end of file diff --git a/api/private/components/Gzip.php b/api/private/components/Gzip.php new file mode 100644 index 0000000..efd427d --- /dev/null +++ b/api/private/components/Gzip.php @@ -0,0 +1,51 @@ +file_new_name_ext = ""; + $handle->file_new_name_body = $options["name"]; + + if($image) + { + $handle->image_convert = "png"; + $handle->image_resize = $resize; + if($resize) + { + if($keepRatio) $handle->image_ratio_fill = $options["align"]; + if($scaleX) $handle->image_ratio_x = true; else $handle->image_x = $options["x"]; + if($scaleY) $handle->image_ratio_y = true; else $handle->image_y = $options["y"]; + } + } + + if(strlen($options["name"]) && file_exists(ROOT.$options["dir"].$options["name"])) + unlink(ROOT.$options["dir"].$options["name"]); + + $handle->process(ROOT.$options["dir"]); + if(!$handle->processed) return $handle->error; + + return true; + } + + static function Resize($file, $w, $h, $path = false) + { + list($width, $height) = getimagesize($file); + $src = imagecreatefrompng($file); + $dst = imagecreatetruecolor($w, $h); + imagealphablending($dst, false); + imagesavealpha($dst, true); + imagecopyresampled($dst, $src, 0, 0, 0, 0, $w, $h, $width, $height); + + // this resize function is used in conjunction with an imagepng function + // to resize an existing image and upload - having to do this eve + if($path) imagepng($dst, $path); + + return $dst; + } + + static function MergeLayers($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) + { + $cut = imagecreatetruecolor($src_w, $src_h); + imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); + imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); + imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); + } + + // pre rendered thumbnails (scripts and audios) are all rendered with the same size + // so this just sorta cleans up the whole thing + static function RenderFromStaticImage($img, $assetID) + { + Image::Resize(ROOT."/thumbs/$img.png", 75, 75, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-75x75.png"); + Image::Resize(ROOT."/thumbs/$img.png", 100, 100, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-100x100.png"); + Image::Resize(ROOT."/thumbs/$img.png", 110, 110, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-110x110.png"); + Image::Resize(ROOT."/thumbs/$img.png", 250, 250, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-250x250.png"); + Image::Resize(ROOT."/thumbs/$img.png", 352, 352, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-352x352.png"); + Image::Resize(ROOT."/thumbs/$img.png", 420, 230, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-420x230.png"); + Image::Resize(ROOT."/thumbs/$img.png", 420, 420, SITE_CONFIG['paths']['thumbs_assets']."/$assetID-420x420.png"); + } +} \ No newline at end of file diff --git a/api/private/components/RBXClient.php b/api/private/components/RBXClient.php new file mode 100644 index 0000000..5c1e5f5 --- /dev/null +++ b/api/private/components/RBXClient.php @@ -0,0 +1,18 @@ + $total*1024, "free" => $free*1024]; + } +} \ No newline at end of file diff --git a/api/private/components/Thumbnails.php b/api/private/components/Thumbnails.php new file mode 100644 index 0000000..e1d3144 --- /dev/null +++ b/api/private/components/Thumbnails.php @@ -0,0 +1,112 @@ + "0180a01964362301c67cc47344ff34c2041573c0", + "pending-110x110.png" => "e3dd8134956391d4b29070f3d4fc8db1a604f160", + "pending-250x250.png" => "d2c46fc832fb48e1d24935893124d21f16cb5824", + "pending-352x352.png" => "a4ce4cc7e648fba21da9093bcacf1c33c3903ab9", + "pending-420x420.png" => "2f4e0764e8ba3946f52e2b727ce5986776a8a0de", + "pending-48x48.png" => "4e3da1b2be713426b48ddddbd4ead386aadec461", + "pending-75x75.png" => "6ab927863f95d37af1546d31e3bf8b096cc9ed4a", + + "rendering-100x100.png" => "b67cc4a3d126f29a0c11e7cba3843e6aceadb769", + "rendering-110x110.png" => "d059575ffed532648d3dcf6b1429defcc98fc8b1", + "rendering-250x250.png" => "9794c31aa3c4779f9cb2c541cedf2c25fa3397fe", + "rendering-352x352.png" => "f523775cc3da917e15c3b15e4165fee2562c0ff1", + "rendering-420x420.png" => "a9e786b5c339f29f9016d21858bf22c54146855c", + "rendering-48x48.png" => "d7a9b5d7044636d3011541634aee43ca4a86ade6", + "rendering-75x75.png" => "fa2ec2e53a4d50d9103a6e4370a3299ba5391544", + + "unapproved-100x100.png" => "d4b4b1f0518597bafcd9cf342b6466275db34bbc", + "unapproved-110x110.png" => "7ad17e54cf834efd298d76c8799f58daf9c6829f", + "unapproved-250x250.png" => "cddec9d17ee3afc5da51d2fbf8011e562362e39a", + "unapproved-352x352.png" => "509b6c7bdb121e4185662987096860dd7f54ae11", + "unapproved-420x420.png" => "f31bc4f3d5008732f91ac90608d4e77fcd8d8d2b", + "unapproved-48x48.png" => "82da22ba47414d25ee544a253f6129d106cf17ef", + "unapproved-75x75.png" => "13ad6ad9ab4f84f03c58165bc8468a181d07339c" + ]; + + private static function GetCDNLocation($hash) + { + return self::$BaseURL.$hash.".png"; + } + + static function GetStatus($status, $x, $y) + { + return self::GetCDNLocation(self::$StatusThumbnails["{$status}-{$x}x{$y}.png"]); + } + + static function UploadToCDN($filepath) + { + $hash = sha1_file($filepath); + file_put_contents($_SERVER["DOCUMENT_ROOT"]."/../polygoncdn/".$hash.".png", file_get_contents($filepath)); + } + + static function GetAsset($sqlResult, $x, $y, $force = false) + { + // for this we need to pass in an sql pdo result + // this is so we can check if the asset is under review or disapproved + // passing in the sql result here saves us from having to do another query + // if we implement hash caching then we'd also use this for that + + $assetID = $sqlResult->id; + $filepath = SITE_CONFIG['paths']['thumbs_assets']."/{$assetID}-{$x}x{$y}.png"; + if(!file_exists($filepath)) return self::GetStatus("rendering", $x, $y); + + if($force || $sqlResult->approved == 1) return self::GetCDNLocation(sha1_file($filepath)); + if($sqlResult->approved == 0) return self::GetStatus("pending", $x, $y); + if($sqlResult->approved == 2) return self::GetStatus("unapproved", $x, $y); + } + + static function GetAssetFromID($AssetID, $x, $y, $force = false) + { + // primarily used for fetching group emblems + // we dont need to block this as group emblems are fine to show publicly + + $AssetInfo = db::run("SELECT * FROM assets WHERE id = :id", [":id" => $AssetID]); + if(!$AssetInfo->rowCount()) return false; + return self::GetAsset($AssetInfo->fetch(PDO::FETCH_OBJ), $x, $y, $force); + } + + static function GetAvatar($avatarID, $x, $y) + { + if(!SESSION) return self::GetStatus("rendering", $x, $y); + + $filepath = SITE_CONFIG['paths']['thumbs_avatars']."/{$avatarID}-{$x}x{$y}.png"; + if(!file_exists($filepath)) return self::GetStatus("rendering", $x, $y); + return self::GetCDNLocation(sha1_file($filepath)); + } + + static function UploadAsset($handle, $assetID, $x, $y, $additionalOptions = []) + { + Polygon::ImportClass("Image"); + + $options = ["name" => "{$assetID}-{$x}x{$y}.png", "x" => $x, "y" => $y, "dir" => "/thumbs/assets/"]; + $options = array_merge($options, $additionalOptions); + + Image::Process($handle, $options); + self::UploadToCDN(SITE_CONFIG['paths']['thumbs_assets']."/{$assetID}-{$x}x{$y}.png"); + } + + static function UploadAvatar($handle, $avatarID, $x, $y) + { + Polygon::ImportClass("Image"); + + Image::Process($handle, ["name" => "{$avatarID}-{$x}x{$y}.png", "x" => $x, "y" => $y, "dir" => "/thumbs/avatars/"]); + self::UploadToCDN(SITE_CONFIG['paths']['thumbs_avatars']."/{$avatarID}-{$x}x{$y}.png"); + } +} \ No newline at end of file diff --git a/api/private/components/TwoFactorAuth.php b/api/private/components/TwoFactorAuth.php new file mode 100644 index 0000000..f477468 --- /dev/null +++ b/api/private/components/TwoFactorAuth.php @@ -0,0 +1,47 @@ + (int)!SESSION["2fa"], ":uid" => SESSION["userId"]] + ); + } + + static function GenerateRecoveryCodes() + { + if(!SESSION) return false; + + $codes = str_split(bin2hex(random_bytes(60)), 12); + db::run( + "UPDATE users SET twofaRecoveryCodes = :json WHERE id = :uid", + [":json" => json_encode(array_fill_keys($codes, true)), ":uid" => SESSION["userId"]] + ); + return $codes; + } + + static function GenerateNewSecret($GoogleAuthenticator) + { + if(!SESSION) return false; + + $secret = $GoogleAuthenticator->generateSecret(); + db::run( + "UPDATE users SET twofaSecret = :secret WHERE id = :uid", + [":secret" => $secret, ":uid" => SESSION["userId"]] + ); + return $secret; + } +} \ No newline at end of file diff --git a/api/private/db.php b/api/private/components/db.php similarity index 70% rename from api/private/db.php rename to api/private/components/db.php index 6fbde57..8cd442c 100644 --- a/api/private/db.php +++ b/api/private/components/db.php @@ -1,6 +1,4 @@ getMessage(); die(); +} + +class db +{ + static function run($sql, $params = false) + { + global $pdo; + if(!$params) return $pdo->query($sql); + + $query = $pdo->prepare($sql); + $query->execute($params); + return $query; + } } \ No newline at end of file diff --git a/api/private/pagebuilder.php b/api/private/components/pagebuilder.php similarity index 55% rename from api/private/pagebuilder.php rename to api/private/components/pagebuilder.php index 1905c88..5571320 100644 --- a/api/private/pagebuilder.php +++ b/api/private/components/pagebuilder.php @@ -11,15 +11,13 @@ class pageBuilder ]; // this is separate from js dependencies as these MUST be loaded at the bottom - // when core.js is moved to its own file instead of being plopped directly into - // the html, this wont be necessary - public static array $polygonScripts = []; + public static array $polygonScripts = ["/js/polygon/core.js?t=35"]; public static array $CSSdependencies = [ "/css/fontawesome-pro-v5.15.2/css/all.css", "/css/toastr.css", - "/css/polygon.css?t=4" + "/css/polygon.css?t=15" ]; public static array $pageConfig = @@ -28,7 +26,7 @@ class pageBuilder "og:site_name" => SITE_CONFIG["site"]["name"], "og:url" => "https://polygon.pizzaboxer.xyz", "og:description" => "yeah its a website about shapes and squares and triangles and stuff and ummmmm", - "og:image" => "https://chef.pizzaboxer.xyz/img/ProjectPolygon.png", + "og:image" => "https://polygon.pizzaboxer.xyz/img/ProjectPolygon.png", "includeNav" => true, "includeFooter" => true, "app-attributes" => "" @@ -51,10 +49,32 @@ class pageBuilder static function buildHeader() { + $theme = "light"; + // ideally i should probably have this loaded in from // core.php instead of doing the php query on the fly here global $pdo, $announcements, $markdown; - if(SESSION && SESSION["adminLevel"]) $pendingAssets = db::run("SELECT COUNT(*) FROM assets WHERE NOT approved AND type != 1")->fetchColumn(); + if(SESSION) + { + if(SESSION["adminLevel"]) + { + $pendingAssets = db::run("SELECT COUNT(*) FROM assets WHERE NOT approved AND (type != 1 || (SELECT COUNT(*) FROM polygon.groups WHERE emblem = assets.id))")->fetchColumn(); + } + + $theme = SESSION["userInfo"]["theme"]; + + if($theme == "dark") self::$CSSdependencies[] = "/css/polygon-dark.css?t=4"; + else if($theme == "2013") self::$CSSdependencies[] = "/css/polygon-2013.css"; + else if($theme == "hitius") self::$CSSdependencies[] = "/css/polygon-hitius.css"; + else if($theme == "2014") + { + self::$CSSdependencies[] = "/css/polygon-2014.css?t=".time(); + self::$JSdependencies[] = "/js/polygon/Navigation2014.js?t=".time(); + self::$pageConfig["app-attributes"] .= " id=\"navContent\""; + } + } + + ob_start(); ?> @@ -72,44 +92,122 @@ class pageBuilder "> - + - + - + - - - - - - - -
" role="alert" style="background-color: "> - text($announcement["text"])?> +
- -
> - + +
" role="alert" style="background-color: "> + text($announcement["text"])?>
- + + +
> + + +
+
+
+
+ Level != 0) { ?> +
+
+
Controls
+ Permissions->CanManageGroupAdmin) { ?>Group Admin + owner != SESSION["userId"]) { ?> + Permissions->CanViewAuditLog) { ?>Audit Log +
+
+ +
+
+ +

You are not currently in any groups. Search for some above, or create one!

+ +
- Edit + Edit

My Friends

@@ -24,7 +26,7 @@ pageBuilder::buildHeader();
- $username + $username

$username

@@ -38,9 +40,24 @@ pageBuilder::buildHeader();
-
-
+
+ +
+
- $userName + $userName
$header @@ -85,7 +104,7 @@ pageBuilder::buildHeader();
- $game_name + $game_name

$game_name

@@ -96,76 +115,4 @@ pageBuilder::buildHeader();
- - - diff --git a/img/2013/BuildPage/btn-gear_sprite_27px.png b/img/2013/BuildPage/btn-gear_sprite_27px.png new file mode 100644 index 0000000000000000000000000000000000000000..3082a3934058e9b1cfa8be684838ccc3c974f1ce GIT binary patch literal 1419 zcmV;61$6p}P)fM9wZ2VFwN5m|7a40Xiti8~__i>Jn1JA@fcU}}QR^eIiQ7+i zq0W6tYO;2we)BnV?sCrk_Uzqz-Q9C9^OkTAf9Kr6guieH6aLH{O!zPEV8UnI!Gu3? z2NV8y9oE;^4F3nxZ{`p3~{f&CP|4XAzc1Wo2bp5lnbP23D)p zEGrF!mC7c;u-kuO; z23B|Ko;SF?{%bwsWOR9ZL?jvBJ)y?r^eh$v9i9F3ay@(~7ZN9<%iBXDW^naGdd7pQ z-)grbXTAMa2pj5+dk5!D##bpRKfa$2N=C)W=qhuch`G9XtkXY+o;Ev2otA#Nh56x8 z?!~4C9a;?R3jAN2-$&R&&eXvu(gRk9 z_~u}A&9zMg{N>l$Sa4CvlUTc|o{X-7110@q)-XLd7r&7QN2-H@ZqD2cg!*}FBwHy_T-tuuOJil1c@ZO2V7IG9T=S!C&ZpN znqki_oSNUvxC7^MQSp!ozxNYmj@Z_;5B27L=e3@3k_pc(5zb`7&PBqROxUqNIFkw6 zeS|Za@E`MpGnw$Thj8Zqb_?@?JMM(rWT!o?P*qk~@J z==M7b<1{KgJ-xcR8pq3heSH^O7=r&?y0sKU72?(ZdxGgcHp1XUP%W{eKu$VlLi z@sL~@j*gCg^-$xORjpQwt1viAmh`_`kcgEfzAj@Nu)16>oLAE-3~V~ZXceZXr^n%N z#FMmSx=O-=Dom_hP=!%WS}t8B;pypVlmjX%Drgl3RX5sBt1!jI#i-Gs$RZBBnzUTH zalOa*mG<3aGNC3xt1x)>3L&v7%)gw~cymyMkesNfN5#fKE@_2yuMx&nqE#5oBiaLu zJYHY=j@j*Yh5KTP+~~`N8V}@QjE|2)3^gzMIYY$|`VgA^k$4!{5a002ovPDHLkV1m?;tRw&c literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/Arrows/btn-silver-left-27.png b/img/2013/Buttons/Arrows/btn-silver-left-27.png new file mode 100644 index 0000000000000000000000000000000000000000..ab3d656147679495bde2c0055eeb6c95c963f33a GIT binary patch literal 1687 zcmaJ?drT8|94{)%gt`4OhC!EjDalNhws%)vw!#o84vbX>2-T@+X%A>hd$m2*(m~X! zfXu{fJd~-h@emzGDj*IEq7nv_S5RcU-(ZpQ2=Xeg->wL_KgPbv-S3gl=ktAD?u!4> zZ+F=2vY}8YJN$e(0pz-ye7^g5EBUsop-aidf$-rGfp{395-2c=mk1BVAU~-f91Fk% zqUf_Vm^+2Cl`0P65j^e@wh)&x1QrZKEtQjO3dP-1Ef)wS7y*T1;bNHwbwXcGg~TEc zYKRLL;mWZ9xrV9G zDuj@DP~Qi|&lz~`MS_g8u{|}W)H_%EV z0Q(T{e+nyuqU9JIfGP1Pg^+Aqn4`s&ob9c^1O%=K!tu!UD*8v@1g?z0<&bxv3j>8h z#4-`CQm*2;T(+M~NeE;@%#Y(iB^4NAv51X2J2|-`%zaJ>dJsi@m|iT_J`M|YX1Xz1 zPKdY5I+ueBqokOOSm%m9a7o-IT+1j(<)mj0rV#&ti4G}nDYTk0TfBKJuAAzuaYdWQ z;J|-ilT|tg@!L^}16pB@_|B)acv)SC&*EcjY zG(A1t+uK|98qAr&$_jYZ4HlPxc>x$&L3ImQS_T6H12c1gw4R=xrcN+53+mcHLkH;Z z@9*yJ9v&Wk-3unCfzfDe?FZvipkok>jEsypa-CNMcU*=q#j z;jD2aVHhZEevS&D}rpOUkNx`c1!O=CrrB zpFe-TyrMBaAu;WCZf9rb?>P@E>V}5jnukW0dfqJO<>fUuH^;=rw)UCNox7mbYSYux zOG`@)uT0IIGfhoRH*aSb6ckieR%T{qW@KdK<(D=#HujG!$Hc_u=H_1e<<|?^OLcX1 zF)=Z^!Y8q@vB}BF2?+`H_4Ou`sjI82sHkXZX=#3beqmu@c6N4ZYHD$Dab{*_Wo6~v zyLZdW%QZDMB$Gf4Tbu>pI7udwCuE{vP~%i;tG2rs$MbKk3t8 z6)*mX?z4Ni+;AqPPWS2SzKbWbPCa{Ks-uTjp8ooVx#QLB9cGl^#mVfq7k77v;#^9s z8847Dew3!HDphHfH(RWN_wshx23Kp37x1m@Y1P^k9sfA(Mx*L>ufvs4`>Rjm?GE)A zJg+`Qc`s`ZXCwy}Tuyh~USG6x&ffT(EqYn+t1k}8Npr7!5_lrZ=FXYW{KC-an-4B8 z>;Wfz6Rm%YOmetW_GbRnwy%=@&TM)rxK>%3mZw;d$aI7~tzjWPRu@1z8(Yk141I3H z(|u`AyKY@8dY;JBG41cSbj)A6#owXv&Jw)Y(qbxB>*J!Tw@H#x|8g}QulYn0!fm|k zVz9p7F&^1-;_PFa7IVkcvlM1j({@Qp%drM&l0%EJc)#bCr0v1^kDVl}ow{AP?RA9~ vE9B?Uc-FST4ceiHd^3&rQSF>3aC}B7Kj4)*|7hz$%df)E=P2jFLB94M<$DU2 literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/Arrows/btn-silver-right-27.png b/img/2013/Buttons/Arrows/btn-silver-right-27.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3aab16cdfffce020af188eb8c50325d2b98d80 GIT binary patch literal 1720 zcmaJ?drT8|9Pfs~spyy}krDM)jVy8P^y}_$gScxglw62(8r6u~m0(1jtYWeSXq!vzMZ6+%%ggaFY{j8x9T4?ix( z15z;yA4%hr_zDgrk?z+hA%P||LZpcmF~s8tcplfKwvneg5#AU?BI@XbA?hcIZ8-~z{&_1j$7(l>}A* z9083;1|p?$F`S^9$MgBj5V;Bw%0*BJmxad^h*GJTNhJp`Xgn&NN+Ji7$vg@pm`mf) zxd99woy6fX=!;w~EQ*&wa%7P!e$5S7mg};DOo2t_LQ3gLNW4!8%YgZknbPHRp)ISo zz!fi_i~q7*5K9Jh9qhjjdT|SLk88SQTWqmpd`OPDU5VM6a3CuOhkN6*u!9jihr`j? z*=e;}$HvAwIy&a&(DwFr6h+4;QO7ho=|KNzL@S%n@&W^3v~?W3r<2c4Xp?Cy=yQtGxJ%MwZ6Xo^5x69xw$E+Uuv~lwK}o* zS&iP1-Q3(4XIfg?nKNe!pOiOsI<95>kdu>h z^XAQhf`T5~SX*10$z=K}?Q6AKT~t(5Q&Uq}H)tK0t#2JS8jZ8Fvr|)3)6>%v6BDDO zqcbxz5QY|Fd(7Jc8H`_ZhY-1ju$w4==S#7k9K@sS9T-)($=(fK1aHysX?Bb z{ZE%ZT;uOa*tGMzcFUs_iK)cu2>sc%(x7#R?1CIHOz)qA9gURO=$l$N)*EB!7|$VXSnnGKoW zX4yAaXH2#QGYAqteFIgpG3VT;(V8-}Ld<{T?#w zYBd-3Xnrz#1rN}pN^;Ns?ObJKd*$~(D|fPkJfFzp&L7({lVam{M+V-Hb2IstRqC>7 zbkEJC6Nj`9867JPPu!swRyO?RJ@ak3)3)wb{I%xYN2QW`9*1}9PM&2yuF^jsN&0+@ hYYsLf&lTg`a5<+B>^{-`ey8hS62c4R<^_L|`VXW03{U_7 literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/StyleGuide/bg-btn-blue-arrow-md.png b/img/2013/Buttons/StyleGuide/bg-btn-blue-arrow-md.png new file mode 100644 index 0000000000000000000000000000000000000000..48a984c337d6af544b883370ad3ccfee636c75d7 GIT binary patch literal 1687 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 QXz5>>oRG@9#LX%F549mlwg3PC literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/StyleGuide/bg-btn-gray-arrow-md.png b/img/2013/Buttons/StyleGuide/bg-btn-gray-arrow-md.png new file mode 100644 index 0000000000000000000000000000000000000000..e55322eb95e4aa34ba4ffe04dbea759ad1af7c93 GIT binary patch literal 1658 zcmV-=28H>FP)P?z0QAxR-}3VEi4!O4>go)PrC@7NWUYmQ%!#vi)mG+$$W&TUYinyZo6T;oDRnHh z1OhBEXpti*TiUN|Y;3q(uG6Pamo%1|0YD#3hn=0Ba5$WKU8;X9`TRZ=@^hA#{|ml@ z08=!5(&==6f4}~*9dl#?fD#va|GDbGRs+lYNi`@ND zkraB=vW(80u?fw_+%C~q-G2n!PY<%8cL2bOQUJgTO9+4^1i%sk0G1E{O9%j1LV)se z_wHRRApocM@893Kb7yvT7E1`gL({a6A3tXH@X3=WSV91vCCpe|UA=ejo|!$w5(4OT zd%qvQk7;IR=JDglSV901|MmUUmoHx)K79D-(IYG&0M8O;Y;A4L&dz355laZbvxM32 zMSK4I`GW@!u!I0SOPKNP+qai5UzYU#5K9PPCt#S#KovxJ+QoAdMY2F79u0W4U;uV25uc=5v6SS%rc*_~WpU!R+sGdu@N2w-Xn zKYjZ2?AbFjbFhQ}#+PtqW##G9rzYoM2>}dRT3WJX4wevr8I}+LO9+4^1OO}{0G1E{ zu!I1LF5!K_W^&E2m3Lp23TKYwjHae0#g;e8-lUi&r(|hr63G}%OirLfZL$#ey?~r( ze0)M^6NSc^1CRraja_5un&6}|hR|L#Haf=As5-`^38X}S3pc{m$iCR_17JTI9v%^% zBt{fzM4d+!+o@BhhKGjC&!MYBL!!IN(B9=Gz;Xh}@}{S!tE#F71}>YNLxY1?M0RDj zLCy}`i@?|oB1_XWEtN`DR8;i#^_iJNmoE=8CENgaO!jVJ09je~GiDYR7Ah+%!U6IcnU0z;3dGcf+5Hv8B{_5>z2?Xjx zmQ?%`xYyR!Y&M(6<0*A4^>p{}1W;~%`CSwn8yhZ{%i(a8G?o&{BufBgN6)u1?dDpsZ$v-?m9cWc#7qUA#>^3!0qkr+qeHI zX)HyeQL)7$5jhh5;86B{xq+LTo7b;jFLf-1MT@Z4kt?i7V3pzxU{sC?Cv%^hg#W$l!;j|SSW-n zEW3g4-u)X6N6pNkKrp})+l3LbrpyMue*HQWYBM>9nwwih)*?;K2$^ecZqAZ93UB#nzOokv*>>d6C?ahfSj*x!vq}vVok)<#G$n z&7LQhOO<3ebW|jAI$dhy&gPOLm&lw*?x>-`i4bD!KameLMD}sNApigX07*qoM6N<$ Eg6ysw>i_@% literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/StyleGuide/bg-btn-gray.png b/img/2013/Buttons/StyleGuide/bg-btn-gray.png new file mode 100644 index 0000000000000000000000000000000000000000..ec014f903d7d9893fffdd326616fa6a5d5cbc078 GIT binary patch literal 1552 zcmaJ>drT8|9Pa>~VWKWk1blF-iqp~FT}vsw^)cImAS+cH!Ya%ioo{A*d=$rM?Rm=_w~tr zo|dvPBse0N!C-_WCCZibI){F}^8)B^S93%my@XTo8cKy{QC2O9GBy}+9SS62+H6#b zY7O?C&8U#U2xJ=78cL)15YgipTkFTLZ5Tnb84RJsMridWlmc{Uw$UtNx^Fiy0i!|0 z+`>~p3POhF7!&hIRF#*a*5{e@0s~Vb281?*7Qj$S3)rw7W(#5yF(-8qdhfpmnZP83 zGKrY4lhP>C02xlA0FMo^^iV7e#Ky4U7)TH!hz2+i41q8Qg!n8NLU?=xf`O@rNk=0M zS%^}eFcphFiI_PQMIaz(wOZL$E*mGaL0BLVfDi}da9A{gWwDznt&L^2teRGkqZU1B zBq$?p2K%((ccHkNHBj%ZxwqC@=`8To4HiU?KOP_L z|0B6CGau~TiB_*3xeg9H)@SXnycQ;|m(+HQhdQr$Q>zolL}zq@{!$|Q6#?%Ge5$_3P_w<)E z)!rvpHt)7KxKbSr^`|!nvsSyryMrPZEbYD#2Ns`tEA>ROuK3j^T}zusiuZtxhj4}X zR3~?Sc(@8&z08Gm-5!jbQ(9{4et0e<;9bY3J$j*AR$D4Qw=Mh0;N}m$Yd#XhXk|S* zo3SswLTu_Nn^+%n(4HUvRfG209_ONTN4H~{>zH!?#*vaQ$o{f5i}RBATpAiw4Ydvo z4Qc9ZMV&WSCRfHaC_nk$v*NFp-4}21A1rq-PK*wFwyEh$(_pM3qutea=XRCrrM~r+ zum|()auS_^cjh*>_21OR4ev`l%Bb7k+UJN3wwD(!@%H7Vh|a$_X>~Oii{AERq!*@@ zEp)#*8p3X=bY02pITTepx4_g>@u2&$b6uJ~eL-|?)0XjvYgQ_#u|UYza$uw;)cWYo z8PCbciKCWhCpeyiSJlVwwr!32wI(;+HePb;hU)5tvrX;La6VF&Futej=Zmk5zSI%$ ajkyfrebuqk!(XHRe{@oOiu{T+v*>R^)pDx< literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/StyleGuide/bg-btn-green.png b/img/2013/Buttons/StyleGuide/bg-btn-green.png new file mode 100644 index 0000000000000000000000000000000000000000..b19e6fccb10908ce910ea628b07cd9dd152e7e0e GIT binary patch literal 1901 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 Gu>S+)!mbVg literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/bg-drop_down_btn.png b/img/2013/Buttons/bg-drop_down_btn.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ae6dba29b73497ac01bd3027c93524ef27e9d0 GIT binary patch literal 1569 zcmbVMdrVVj6tB@3<73+SSk#zZ>#~>#z4w;BrLwlS)f%ocXabU%aogU)mA1FLz1Tw3 z0h?Q#dl8Mh_26k9~i9_k8D` z-}#+$zH`1KDZ92WTfAs7K1e=J6U4jP!X5PB%%uaP0ET6$+LN^-*pV7h|Z?8O>|f z+QX;P|Az5WYmYhKO{1x_ht1=x@ILIDVqjRiR})1IVKnO990M#KIY?PSfx>>HRuy?olL34aRaV2 z;zk38Yh?*ah195&#;_)rho@XtI>yUD-Z?DxN~~JX(G<^eW|notIv^#7qhix zGBJ*%GcFtJ^+d1ddA0=2G5cwokz<|6Y<<5hQpPHdC7&O`(|7n((3U**re9`*w@M3sq7n~Rlj>cxio@6*y;gn>vVR{Bk zO@lxy7zu&CzP`!H$?zlyhr>_9;7%tPdkk*>39bjhjdn0SJ^k$2vzeKhsi~=niHRq0 zJq5qr2mSs1p$YKoJrIdR?sb6&4<2-Nb@lf4_Vo00c6N4mcSj;1*aHRz28M=)I{HET zUtn->u=gS88UVw?!y_XjV`F3ek3c9C8W;iNThqNb*%nwlD~ub{cP z`E+@GWo6}ug@>!Fs~Z~|&sNk|`RlJV2ljglT3T9uYzSPw68QY9Z}ao>8yXtwE(JU-JdkZ7pm}-e+gW$sa-95x?DaECDUsPzg#GnT`fBllrAXEq|!Dx z+O&Dut#1yFUq2te;L(|?&I{!FMLv^tZ+7VkVd!Ay_VB6IAAfhky0`D>niafIv--js zA-|&IjSF_+{_%u;tK=6O%jChk^Gf$oXTIR75@WFua`&w literal 0 HcmV?d00001 diff --git a/img/2013/Buttons/bg-form_btn_lg-tile.png b/img/2013/Buttons/bg-form_btn_lg-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..71195d844ac75ddb8da87d1ceac367b0ab231a09 GIT binary patch literal 1245 zcmbVLU2NM_6gHYb)1*m&v>_%T8Moqz*uGBU#8$JC*a?eRx+;ydJRzLqrnOqz!FHFl zyZ|p%GYJWa?G?3q-wP7j#H0Zl3=o<$P*K^SO_MdGl!lPfu1%9%ZrY^qQ0;*$+4t{! z=R4=z@5~Mly?*k zD01J#9`{iPLB%7(q-2!(o6XW$CvBLc3=jl?VL6859N5BPP3g9hbLduI&w~uDq^V|X z)zHa~MsGf=xMWOD$uNLs8BOctwQp_NQTT5dM_OC4sSISI z&@v{?Bz}){Uk{9H_hh1uA&y48V5<00lnL2LPHIrM!?KUUH*`u(i5@;6dAN{Q;ss|A z0O0p{+};4|6oi0F_DfvP$5B{b5@a_IWWnY20uTg(B=g>o6L3LU2ms*jVZ*v*D|!<4 zcvZ~X#Y#`aijoNx+c0B>G0{`N@R(s6)|inYr4cs`$cw6;GO||Zc@DCbp{ZVisgP-C z#AZF(z(}{*SMHj@#<$@cCG<-A2Eb(em>0H$S0LskFAX_IMYS%jM0@&8@Ai zT|647(P(`CGx~7}?d-GD;poIcjETV^x(AHzLUPHB7 ztx~Dnz4OCYIKuI;?2qLh^nWpP`aObp?f&SgIW9kOyn18nKxmo#9 zf@~CDIh$}?nt$H+*QvS1%hzw@KUvIw8lSy=GoGJ2e&>yk5>&eA;EVmy4`;9D@-sIs n$6bk+zn(w+5?HwK?o-6>trx2AJTr3>(-Ps}kbFJx*8BeeJmlU_A0001HNkl|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjW$tKT=;&nNX6|BSW@zYYWa(^ZVd-dTWMFA* zVCLv%0MqM|pIn-onpXnTn*!HsXn<2MC^6&~0Bv?jEy^rQO>ryA&s6|>+A0&bTU>CO z2i2Q`(=7(BIQ8lS9itD5TBN9k2?5g&hzU=)Kn^_Vr{)3Edl4{UHyyjj$H2gNz|+Ms zq~g|_=^M3M3MG!$ueS~ipTZ+1Hgm?D&WV9$+Db2%mo+WYyZKG=L+x%>NGyTiZl{k~JXC&%pdiJ5tdthNgdc%5@F zSDwin{7Gr$5^f9w(TfGb7fq?ANWMoIO4^*|FSNCPUU=_yz$4||0Z#3SH(B)8Ea6FWoI3G@O@nio(q#7YYo2hQ zY2Z?xSjn_|jY}H8&8A6R_tyHmJ^I4*JkoPV^ZQ88(EnxABs(u3Pi&rgVopF;XGaaT-G@yGywn!wdo-M literal 0 HcmV?d00001 diff --git a/img/2013/GamesPage/arrow_right.png b/img/2013/GamesPage/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..99349c90d5b28dbf3a5d9ffa223be7ebb2f2ae0e GIT binary patch literal 1361 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 literal 0 HcmV?d00001 diff --git a/img/2013/StyleGuide/btn-control-medium-tile.png b/img/2013/StyleGuide/btn-control-medium-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..487aaebe3c9968e7033151749994cc6fbb2af1e6 GIT binary patch literal 983 zcmaJ=zi-n(7_~s4s*pdRbl~Kw6U1k`O%q!+QEI0&fTJjl)NJ6|m&R)CGv`a=L_$am zNGu2`VqpL_wr+GmB5Z(QpkhF(=mHxcI#xpB$2m<>27;yY{m^^wd*658-6<6>CdSW< za~zi_EE#1spI{?9c8vX>e7oOb(*(^|=`ya-rbQ5!bMPtx1#xx~#~tV0 zN|jd4E2@n>!HO|Ljm3T}w$u1JrGW}zv)L4yGXf@S zP*M~HiZYbtBts;_mQSrH>4#GT1p|dPaRcgNAH<5*DsE7XXHE}O@PeVNANI?{3I-!9 zfRZ4_DGh+8`G2VA4bdSjqa(ln6b>t`0KqZ}af8_G;%ZZIs6f>TvM44Mj5h{VEY&f^ zVI2oRUrq@USaE#^H^Uy@G}VG1Qp>kd!O(c7Ah@ohrskB)Vm@u8@=8vU^0FezMlPdg zGHFSf$?3{~Yhb(KA)gMo&Jj01k{h>z7qG|%BJL(~776x1FJ;vo?PX!4UZ3lX_M(sE zLS_cW7yH*m4~|&(#LHpZvdysZkCH8_&{L~8hqOrAb?baVkWj%WU literal 0 HcmV?d00001 diff --git a/img/2013/StyleGuide/btn-control-small-tile.png b/img/2013/StyleGuide/btn-control-small-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb9aa9aae634834453e40e24e34ba9e82c5fa7d GIT binary patch literal 1036 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 IBX1r4e+_ADcK`qY literal 0 HcmV?d00001 diff --git a/img/badges/Friends.png b/img/badges/Friends.png new file mode 100644 index 0000000000000000000000000000000000000000..e44a891f746d37c9ef68c722474c0e439405ad29 GIT binary patch literal 85707 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

9`vNp`F9_qCU<0vvnz6UZt_*jT? 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 IM6N<$g0{aNGynhq literal 0 HcmV?d00001 diff --git a/img/badges/Moderator.png b/img/badges/Moderator.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6ad60f5a47bba13f34bc121016308fca31eb57 GIT binary patch literal 23864 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 LNkvXXu0mjfh2LTW literal 0 HcmV?d00001 diff --git a/img/badges/Veteran.png b/img/badges/Veteran.png new file mode 100644 index 0000000000000000000000000000000000000000..93da954bb837a988c008b7892d8fef079a48e9e0 GIT binary patch literal 93699 zcmV*KKxMy)P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBXyj!8s8RCr$Oy$5*R*LCGP$-GHo$0?J^WRgjlOyby1Y`MsmtuC>M zq}Y4!73^RENsu54(R&AoP81TocY*~V0fN2vUd5t9^)BuATZg;}$Iof=>?D!^edhxR z0T=iF@Bi$x_u6Z%{hvPl^wY&=_QU`5e}4QL|J3UF=(z$tSK!Nh1wQ}$^T!DQ|IZ_@ z@z?oU|NhTCLEy{$&iA~wo-6Q+uYflHZ$4bV(Gv`MZj+uX@YT8kI{E+0!vOGGeAd#x zdrE?@)_u_PYQMr)KxKdefieJP13dxYD||Eby!5Z;70`+A2?YAw^U-q!dagjv73jGF zJy+l#zXET*`R0H9!0fLM9z6JmJ=dw{3iMoouh11ZefrY3>KhwRR@78~x~p^d`7;+U zKKAhC3t095$~{=pSLmMTd8uEaD^O8geK24{kVPfLSzU9Z?cKlkd~9s&A8-kNpY=ak zf6V&5hqzKtS@{*ZH+o*`m;4H}cXtjAkBa=*FTmegwzXMxbA#11*4^*hx9{KZ(*KtA z%)|9VKL4+WL7@j+{*vDpJumMoa0RIQ|De99sdGbEs1+4&vGzTkR^Cu+)s6M9KK9sS zPjU%*vBtBeu_m%!Vttn-oIs^P&qvP{=(z%4)GKiL^388o*VS2ARHSX)w#{~Qc35#u zr8RA9d-q%4`qs<5t`V#StTn9FtXZsnEM*73!|K5WzNl}0&-3oN0`2YXkL7OKWLcYX zZR_@JR^3oX862ny-Jt`fn_e&U!w2 zu0YQf_@Z5bQ>RW$si-Qqzz~0G{%UL7-ezn318hTBm_=i-xMET_@q=D zGkzQaAk0?!EVo5V7IgEvRv)QmLq3-q@a`t-I@1b_ri|BUPm^Io=e+rv{ona^60EMWrz0mT&judE&npy!V2 zxdLCbD?kSD>zj%SZ$-pLTTp1QO`0;iJ?Vs{+ zsSNOCO<@Tj{8N?`r#&A%SD@z#e37oe#fxVi%iNUp#^RMrsQXu$*Zf5m8Jl3Gm30;! zn@}`t*swre&pMXUe+7U9mcYPOEP;a}1pPJZYhR?--Sb>~uE1CJ3LHIp^tVr+J~95} z=@Zr4JGS3U+L&T%1J~092(}QA|Ga{HOG!_+tlTWCs4BH3OBe0nVuiEfSxW!?Si%6t zv7Tdz7Tl8od}Z&bo)`XwxdL5XyJxcYZl~4PwxiARHWyh;ax&mwn-y%?Y`Fz_R$N(P z$r&lOaOpgoK4Xk!WhdIgMf19Nk?I172qY%pT$VsUVF2O*JnBjLg}EL*PqgO>eCe+M zy8i!i;PAe}uI`Rg9lN&MzI}V_@S%ft@W>I{Tv=u9-Q9NM_HElzRt68C!3rxYt*oiR zQnFHP`O3K#v|+hroS#JGbie0*xSXmeOYS>JmY03-_P`RKUn0=&+U5)!WI_XYASY z>#i<4bmExR)>pU;AU-MF5|X2=zOlv*A3gNx!o>?qc%2dk4Sbjd{L#ZQpob6eAL$0@ zc`jewE3k9tw#i$!HroCJUABLJmtDSe&aPg)XghYc*^V6uemXiVE-l>}T3ReBGTJh; zb8H_$At`;M?b_3ASFT;L<0lT;&W={AZK$w~S;-cc6k(f+vaF-4-4-ocRL0ev&zisz z7Vy7Wzt567uqP0Fb#J|%SN`vP1$K0_O>1dw__VdP-fjLPhxgl_t`6I?r^B{wYq4D& z?N-;=Xkqd3R$N_e6DCiwi0EkB(bZ{rMfrB@pN}3pwu%cK#1c1P zI_pK&U$TCi)uR&p%H4%MFZkc>3YD^Lf7&S5#O?Y^=?iKi{7C=}&Cb@WB=l9%9vXRkoK?|Ms0*_V!zE+U-|fv17*% zQ!;FIfuOQ_ixm`RSR&eiin>b6&Ck2>o4@&+Y7vScB$}`~1Tqj&5a`JS{@w0|oy|__W3{jgFi^+f{QSuY+yF)dDdUBG?=Cb6Zp#AjXf{;-}DN=>ico`zCHKK zDvLS&b8Sm$K17~k+qS*g_U_y5GJyJqY731Fb^ZR-jT>#z;wARnGtXGR0ex)bgwa-5 zT0+Y&3qnu;h<}w`xNyd8eto?4&V5WmyC4c>T2fl1C8tE$Mmz-4v(oG^orO7b=4|B! zN3fI)NHM4`!BZ?5iT2or{hQtmJ%8*gcLh$JIyL#yl}lDg4ZpcK&#G!lthu#;e*b@>pB6bgq?@ zZ?QMtyzc_QhaY`l2M+DCw2k5fY=9~pYzc``mYkkQIZ#C z)&>_~&H5GQyM7r!UcPMz4z~dV2HRi!*`M3Dzx6F!g%+S-^JW`7VuVeYGTtUlA8WI` zW?J|D{Vo7}^6|%zi1q>iCR$izpall|vesFAVzi}arrQ1^`z$;n`~WXln?LDcHn5D( z@(uVlOWuJ!py0pB9ntegzEW4<(9xr*Z@m4M9X@v4iniq2<}JC_(o%0{&YrdlmoJb7 z9H4H`u#gCU3kY6iYuEXjkIz~gKVh;x{`ik=+VrWmkxd*C6>39A46^kb{NMv5+Q_jZ zEGQ(Q>X06(c`wIq{x*34fWM_^5k)Q?X_2} zwyqkb-z-Z`i?gzdEw;vYt@ZBxl0EzUGd5`0V2g~4u*m2Qwsh%in>&A+0>GuYY|buS=c*0t6q; z0!H%hAFz6K1HY^{zUOgzu7Iw<1#zDsPL*92R!X0eSPH)ikGzwwRO zfRMne^Owv86Buc}YnNJ7Ob|7Hl!cN>crBb|Q>INILkO_E!W@x<-g&t3b^3b(fK-HX z6B1kSX_lr7_2>qAZrz?M@XNXaSb9Iv(Y_O!?^Qd0=`!el2?3yh7T_ip(q2yNNmE9d zm)C4(`5hb{Y6JTBwx9mwd)DWrXDuQo(h7_6`2SM~2>r}A(AVZITyTu%7xpKA@+Y}L zq5hvtoHoXmuULRdXdt?PNJ@!7Te56{&0jRvB4fhnDrA!dWPjAVPj4{;6CMcwQV$9T zPyq0B1bPC%FYC?kd7Pdrux;D6@9)9L^WMFCcK5Z{;Py9LX?Zc5IvXKRss#kDw*CWN zuyt!!L+Rbc3BS_Dlh%(O`LYd#{F9iPVli=%_VU0NZP@66mX@1olcr8>=gP+Z=l}el zvwFG#J-2Po75HUcfkTH5g<MveelsocJSz7t81ts3&^vilxSP+ z>un?0>~V2XwCZ-*)H%~^@X(iR(!|lWVDTcWZE80E4eM<@{|<@>wHb5g?0e)CkM8wS zubm5*&oiG@OOOWpT5y=mL;TDyU=08u;vfh|1^lgw+VanrE?cTDKJ1KHZ@&4Kea?T^Z{4K--vnJZ*W%*CZK?NMHurGL z%uI7bKWEa~8#`gRjTt-KF##(Z8f?+BCAMs(_vbU_xXrH(?5X1;`w!^5eI@n(nzhR; zfK4A26K-jl$q{kQ*?&F^|ZKs|<9f@@hK1<5~97(fpx zsORqOxdOkeE6~~5Ic(Ri4!e!1hdw^|-~%Hou(GmJ*n07{V$}jR{18h_i30=JZodA$ zfOlhU#E6$IFf7PYvomr3S!^MpA@;|A{6~3@oc`L#p%W*K-Mh?Z9*?t#i~{O!bF0-e zIk=&**0#1Z05+CdacQAtWo5kk8^7@zk9GkR08|c0Bqaa9-mJf5^|S(iS#N&N^!keSG%WXY~JHvpwBiY|eaJAGDGUKi*;!qHM?RotA*?ck0|(wt z2jZQNq3&L~e3`(|%z%$XTTUr3bM|C603^S>!U7|sFae2##+&}}h*6{3xO@`vIP{+O z-^Pf@u&chlE8z#Mw4A(bbN~ljfO+$sH|@qNH=JDf0950ensUm3a$C4?{$7Ge0>AIU z4-`xk0K8daSv_5VujoD6^Rj=1SK!j6OHVX4)mm`KTFc0cv(u-K+NYm>3LGc}-&=O- z%t^q%M$4d8w{p#L1VO7UJ|ziJPnu<=rF^`6>5`*7ymBN*7p-eC(C&av6E$67FApC+7p?!9^kQ1COd zfsc{&zHVnPoJAS9$12bWL?zQ5Shw2N2CawK6K(m0%mYvzUzl(CC z{;UfoA7Tvh+Us}h^5wJE)KpCdk$_2Pv=x;V*^nWFTX=~w1M!^x9vy%<05e$wSl?ku z5!ho6@+-U_dLH^Kb_Fh7y8guO-FrCEQ*HjdDK>6wKU=?kiFIQD`X)8|2Oqp=AED)c z?X`PuGao&15+JbCa*7HqF(ciQ;RmF#k^lyU4-{@Gw91-FYizE!(`QfF+wZ=G7r=Y= z`Wtub)X76uizQfGT(AWp2hPYzRXK6z8{hbbPW(sv|H2cb1YE)r0Qjgo&{ymo>Up_6 zSKwE81&$p%_U+cDCM$*i9}P=y@%)K4f9@Cy3-NV*`ZK3b*qd*?Veh>AHUQz<_TIbi z!x?zhj-NVXhfkigy?}d62)6AVJMaSBhZWcvQv7RV5U;TD-$4p|*REVShdJn8E6mR@ zKS)6+}}`P=+8HATo?4x8Ofy^-K`@72XRy5B(Ln0^oap zTvk^0$6Z~!M(=9h){=$bXJb;RRTXDj5q^D37fiG1lSf$*Y{0`u4s!CJv5WWuyh;}E z{(JA)d+&dMOVDNO*t6SOspT7*YOH0e$UQZ<2XD6%n1J58e!=d)cEhe-I%$oK6`cAZ zwruGvn>Br;&7Lz3|9~Wr{{{QGzqG4+_fpz?OBwA|xovyfyD_m*TDEBu4!sGX79GCM5~5M-MQyM(E0hLMZ&ejpR*)BGOBPSHkt1F}MAY9VOnli^(NfIH+W6LA|MlPG@-h=xkJkPo|7d=o zj6pr8zeGSir~fbMp6Gd)FWD8q&iiLw`@5d*=-B>rM_0$wM~)qAzHs5R@5wXArtj`* zKif!~uezoTW?wm^nyD1gmF3u9-LoF#W!ZHByN=moT0z6?? zuV195FGs^4Z0r11Szca-D+@FwNWOvk{Q{7DeLs!XUrcNWZb1ue?(7M+Z1EJEJg%P& zeCfwFWYCi~c6>irgp;K)`1D6V`cdh_(_h3P4+fx8K*+xag-8PYB1;p4dQSf@**)9y za{e!`0O|XGJ%0T7e?4^c(5Oq7&S!RacWzc2Z*y_M10#>>GV5gY)^XDCgNOD4#?@L8 zF29>_%VBMz9?#29$CrPj<>1qw&Hu|_d{+u~-7y4$*u-!gdy}lGrPdDM z*H_1EfSf!g`^548Vj_5qjTRd2XW@~4mYf<6>K|!Ilo2tQeXd!v%*G%M9x~_!8!_|+ z8$I+zn>}+hb-%YIZ;VE2yy;`8!rJ&k{yhOeslWRE(*I9qz0A_^P#J>uoc{lp_e;;O zeF?6>v15lPoH%=87S25t`}gmEy>)Bz>*ZK>*Rv_B>nhmTnbg$DmWjeHA9-y_c@cj8 zWdwr?6U(n08?RCTx7zv|1U;<`@nqrA-`v(<^=$B3f6zp42yv>?7ea^#vn5} z@n_ncSyOH4l6kg1V153>LT0rde|YH7fkmfIAK%^D*3ezoP-$CtG-1|J<2JW=^%d2{py-8GTCo}b z{u2IO>cl$@jdh&b^=#ZGR*TiuR#`osemgqZQI^xjr8+(wzq*5Twq;d z0?Pkk35p*ic83a;B2C_wBAFzVeHhL3i2 zm6tPGtO|$W7ED36K>%v7ii%Q~B?N~Bq9q8k#N-6#0+caPxa-q}OBR(fCQKPX--iL9 z#|r!lb}#ol-GAW~VAKC08vJpcox5{)cXiz2q`oHu&NjwsRbr4)Ra45^j5`klI=0p@ zLaX*+%3o&XWC0b>a!ZQyEhx~>mU%BgbhFgvLF5@Yu#Y|U^pCA?pP$*dF#~KO_FV(| z^|Aghy=aprjGz{uU{h)F&73jLmM@zNS|4C3Ozaf^n358M@kcWK`b>BM%m%D1MGUmn z+VKn6iWImCFfb<%05LVn5~%mnnDCQ<$!B=zYFp<^iob5I#m23rEMcxdYZa4(o7w!0 z)=G;|W5qjoeVu!D;VjgFzF;f90F7h{C6=0*fz}|${kyrP`4Rx(A}-^TEVcjC{}%|@ zV+HmvytjIO>_6xgxbxogR$E#wEB9b@YU4Y4Q!k` ztEnrq{DO^a%qULvP&WH2Te?`i^f5MV%1F17$KlK~0f(MBbH`)JJ;@e%&$ku6KIVrv ze|%Cb;9Le^T{OtNkIk4i-eyi8Z&N0XvKb8S@S$B77QWU})1s^pAW(xl>v#_88Ysoz-NtZ_UABAA4%>#ccOyOj)~(oe4xMaDxG14ZB-ya4u4CUh_-a64tqR%->1&=le-%9kxATL?5QTCb8BRE`@r zZvG$q!5{SF?Gz1IctB4e_z!w-_dKnC;tFuu|K-u6hofp6s^8Q2?4*s!mWY^U1?sv5 zOTE~rF|LlUV-r*|Caa(zmyNjrEA5pwW7cGwh6B&iB{Mm_$JmsKgKRcrnuT64_Hg2z zI(3ZAoj1)QvF@$`5Zrh8fE}StxBu{d^!&RxQ5)IR^#qh=T65Fwr%(LQh7KJ7QtwSK zKE+CL##aDYoq&_-Ca9f z_EOJu;F2wyEG}jPBf}@zf_W1xVBHc+CVykn3e+PC>e+SwajyXGI$tBjAKca5 z9aZ1da5pO_ld)Q>%|AH6g2F<~+h>{0Suh8K%piR6%4xx6n7{uzTQHyD8gpmZ^cjXYamF+t2v$gV2HZ12VQVC3sU_7SD5u z&7C#Uyk?EIl}lz@49>u1#ksDduymULn*EvaN*B)cXn3q=;)xOmWg@h z8e54mMp$$x0U*%40OIB@@M7}^TX<9?12w#C;-qmlddv{()%$0*aM5g+1?E>&>vRu(g&1uovLBjMRT9fZjYdO}iaEeiXZ{9q<5(EHo_G7BBK5Tj2EdnhL-- z+s2LVXG4edF`t#oK>f4W%$1z7O}2e|i|ydFZQs$xhHZ13UTY_F01qABYsYcysRG2S zW}QEG-Z2AHQxhEVr+e=%7XTWe|L)ki)nx%L2%s1|h~?LbZD!cmts>5FI~$$Sxy0zIyeF9q0Gjc5JtN^a&x6OdMLd#G>P& zD`#fB)^EUoV7dm=xwF2{`d=(bgnL|qzM5O@Kh~?hcJ10SfJT*l9@W3%{MZEXd;_pQ|B zxwdET9%q~}VZul#wXNI!^f# zn@I^V;N|D(1}w8J^!bYmv#gd>eEZ)AfUVX+J+45ogOq;{AlB4!r$#@?5t$kWZ(0C$2(!_H^071AECxjzAecjy|A+ zKo@FDyyuX~tic@^m*CZ2lp%`%E+-J&CKI@P;T9Cz(W3{TAK%6`2nsTjhyp_u0G8QQ zIv4sJf&92&OVK;A@v-H9_nq&EEhw^(<_4-|D8f)rM(`hNTYUMS4IBTv`w#Aqt*x)V zT?#s%gqv<8EiSF-xEM=FPO{ke7=~)Dwi%@MFTdQ!h7BKRbG>HK6JJ6tp2;S!b~X3W zqX#+l+i0)F;Hcw67XSucZZ3m223Y_8FWQj7y=}pQ>6VM%UN%ED3yVmn0Tbolcl_8f zyNYP%wL91C64Kqg{5%^zdW5ZB;{&R{$r7UjEFxgJl|$aqW>*HVmEUb;LvN=9*w5xY zuYsVr^>pp+vW;K_bLUQ>WjK||KeP=AKnn<5YsqL-(rjbXA31W^4sqhkPOP0QWGC&u zT?CYF0*ThqqlX9_mkAEL>HGUK5M%+62QidIT;od9&D@p*0^zGIk{P9Cr_Omz#S&R(05sX%KF`h zf#A!3LA7ry1wml&HU4Vx26X+r%*xTJ{M-Lw&wZ8;+ zVFv+V8P_I}mSPowWS#kfVdUf_SZ;0_M4^>7b=pW9HTq?nHG2vjkX-x+jzC2|KqsQx zI(e*C+J_}&#pnrQz)dz{Wz_Fm8N-!k8-mxly4XL!2bbI&fUAIV$&t16ST4>q) zOfzVGm&%0t1~~fBNN(rb;)T;~^7x^)e7TnuZqBg;ruQxaSPX#RlODeT$#1e%!6w|s zppSh3aCHs!1PVVJIApN(>D!wPIE)j28gkt^oc^f}+ocKr(NzG`LyF0!0W zIba++nHjhQb>Lzbkc2O+Tj#^Sz4?2C7)r9pUCRvsr6r|w5a@6mK5_`00v-WO#|CK0 z#V`&lFcodv*7jL;c6JvU19c4gury8hk6B-1^>hrryj$_#_LW_^aplF1j*j*c>g>FH z=I6n`&qY$3y9pkBHV!#ZTth+wsq?2<|Ce8~=bn4oMleHf_ROg^hp}2KRxIX(T|^LA zf&wqi-OQz&Xe)iZNrAl_(Pk&9bysIMK-^&fzJqq@+Bv&~`c8iOm#?4! z8!3OJQ#$OY)e+Z}Yg1Iv-lYo@AG1itd-N$duQcFgtlM)+fS?~&)==1Nz zth2JZn&F?5?eQN!ZbL^5v&G96+H!dOUS2Z@SfjD)8Vb2+s0|)6gfgU`O`I^6$6I27 z0qdMEU}{=^k$H&>rgNN8l0|r<;G~_P8#x8=3Iur-! zIP9crP=y0g5e`KHD;pad?w~V}#z1<47g^#E$V~J%d+>pO+r9Fo`fE^izp?kgp0r)0 zwq*>@%%L6?r8OT!yolaD^(g6nFq_-UCQTk=W5$g(pVdB4XP1HSkGB~!C-eX21Awgt zy`SR(L0x?nt+!paWlJ&XelpbGYRorI+dek5T47shyEW6F&m=nt#AGv(6S9j`xP>Xb zeu06OvT>trDJ!ueY`9uM!+$E&w`_O!J_`s9w;A(h;7q*OA~7Z{ z<>c43+rNLW>x48C2-Oai*(fyXPg2uT_P`&IxM&DV9D=`M{az0~@TJ<8|28iMAZq~W z{>?H3H(4m}vT?KBl#kg(;U;wOxek3_4Y6kSoXIwS{xqiC`nZwVyEw^2bXiLsK6F?= z{{MJ@v>5~l%r|k?twy?=3k9~KvdW$IXK>!>eF!bRzzzQ9!$e-8=!Hmr zGqN|@EQW17^Zb)GYRm`=iwK9ln`McBjmbQZ_1JbV^`7UXy&K3x7A{=~Zy)o{m?&C^ z(Uwkz(m)$9H6@Yp-hJ(<=YHx0I)MRet(ZX4&EG!;5P6*Lg3|W$=TF%MIRafc!{^iP zbbqi;xk*96VPQ6J{z8;~fjpOBM_d{A-LDgi)}1{covzI&#L7P z2WTWv?%C5xrm-8nL91g@)`O)S#KpM0qV$@VmzTzsNnbFK^`nPnfrvys-GYCc?eoR` zD-d~p`@rD?#pTsy@0LKE$pdlE2Tdty)fWDcSX(Vzo?I3kO zME#x%4`8E3;=J?hi%(kbm!2k-?rY=5k05A7TSi7ICL3!>Z4;=~c}(>DQL*8S;aX;E zIbAhNuLjTj0|0Cy_^c=Ge&M+%ZRGHNWDs+0_3Fh0l^Hf~&Kz66b}h2oX{6|*+5AX) zN&mgz11u#2iHspQ;N_p37>_AuwH0jIWG}tco7Da#>h3seL0p72n5*5jxzC?vojYac z&Ys}k$1wo;hoyg?UC?}YdwO?(3x`=5IVII{7PL%qpWnZEnYmI4nYVcr~QyA zKXr2p(F)kYB?|#SSK7kGUQnQCKuk)a9Dr1GL?g$b7{e-5>r|lQaX>^cgzbO#cYmjD zf!c<>Skf5ubPK+?Tk}`{%&*+N`^NxnyBgu;XHw&5Dc#?khy1qKZT=WG>WY;MZQ2Yr zKlSW9T6&pT>9&_tS9NM3CLDpmezdOA9auMa{(ORkF9?4KD+q);ixaAZ-ghM_alLD+ zDb>#>$W)@^-%DzHj#l0=$T-JNov?$)jv%y&vf)Ge+xSs~Y!%j9!65yC{wt8`E;YYZ zt8Cij@c@4d0TxTp<1e%EQzoJb2(k>?h^ZS>UA9tFU2oH;&$O5N_M*q1Y$w?u=h*bx z)Ms%3I(_Qczi8?A6c{dEIL(lca{!q;p*1hDelPbU16gA87c7R*v=oYOGpF%x>h^7P z3HI8d16^(=;OWz+@gS%rNX;h;%65|C`}gnL+i&3_{QkT4#_O+Hbwi`ASiKq(l1MU# zz4q~kAL35@I@wSJxWxp3NN;CnzIe%ef@riWmkvWQ78yxuNli6sgTj0SHsPMVyWi~9 zrXPd4zY-%?+UzknA1o2O2l2yEHfbVpkI9HspEocx;$QQ?)q zq|3Ao8`eR_nc;{mbLLKlk~^Nwo53k`fR@^Jz`X(>`R?ySTnG zK~ZL#hz^7i?J{NO`he&ix(f;cVOSmMkdzg7v)gnXIlX$ z@+NBi8ca1xOEyETU1*CJ%!Fg_gLU>=PX1{YLG62ldUr1;PeO9E1weR7PKl)ifR%?E zPcfvGOltSa>T(!#)Wl!|ofu~{LX$0EkVYy2BRemZ{(da2!vNZB%gqn2e_BGArNxI? zT=WL_SoIi#l#&`NQ&>ZdJZ;)I8;=@rGVR5eN#`d|pKKdBP1kG)u#pocqB)3!ITvq> z&=Umn9LwR?j~q41`u2U%3JY@FrvKNR`u}Kva9P9&y8;QRy0(_i!4R7?evD;hY~9HHJ%b5!W`^kfV0Ujr853l@<}+P}wMfBlwy^2vvE zKrX@l+XR`Y4M*ZP88UjEEM|s{8Z`p4RfI*vL;`l|y_o4*lTlHD1mY$;O%OOpY2d_6 zke(E5FEHQ)mgdP{|Mg#2Nid%!<59H?B{EW{py%VOcm?+FKl(igIajKo;bvxIZG~rE z0cpGt{#0u5kPYieyBFKiMROt9_*rUljJsLaK;dnGtw)N9rB)V`azm^fQcwfLo_uVz zics5CKzd08FNjNubDaId5M#mt&n8ZqNH(EzV3V`+p_!ywxRptiVBpW&p)9)2m_m7`Ag)(51Yl-H;571b#4WVn{CsaTSzTsvPYz5ud zAdv${x(N)gqo7Q19fugG!8MS9GN3H4fLAda5OVaWe&&q@c`-oaF|e591cE(uZ+0-I zOeKN-ote4u^zZ%N??rI0%Y$${>sgj4#b56!3BE!R0Ced;pE+}8DE;f}0^!s;%cDLo zz!0Mx)IS%?tmXLG&6+wI5zA6;YJXgFA}ouv)E^KlEHsGvww;r&6tFMcs%YgM1LWFw z=pY21W=t?sDIxOk;M3rY1Kf~@sl!X@ozH|MG{z>;BAiFs92ObI=HGXx<_9M0a z)H$=s0?_5x*FnIUXMOuU0|pUb2ljXUa!!8_WKst*`})y$OyToc33kL%7#+cn{PKkRa;rD;gykW8B6Eq4o z0h$)rE4Oag`yae(=K&2nc5UUfZ^LQ0hOSB>wYxv;!%?nvD9Z2kn`8<6JSCakyut6i z`yR6eKeQWs{~$>JYp>q5S8m@142-dXg9qDaI1FvnPac6N3;mYX+Tc}q!`*R5J&L6};EAf(aojJT*Ez_@jw z@5`JbuacBs?z<;X9^=N_&kdi$z>OS>#EEC^nza@b;0NV(DaiE{8%vvR>dbMl0w*Ku zU4a-Tir|wB1$MbDAvnzE`;(yY%DrbTt*&(}zcov2E$%%@2xp4%_3s92AZwwYewI`9 z1|VXGr{*U!@#4f^?7h%7!AS^<2(h33>l7&(mGV2ar zeIy%v#*8tr_I$0rwh>#aDvT|b+FCg4*#LGqnF%1*(=g*$0x>7u)!_2w*H|nu168l9 zRVabX$y29T$L$1w+m2nktg&?)jK3xxd!0?4G@L0s^PujoAj_C#b0{;W!Y7zEbu2o8 zg}4F*bLvM~B2wbmm=Kr#tD}JA81s$2uH|?hQ0p*3M}B@o;TSye_}|(yKmD#f|I`ny zU!P}e(0~_d9lpf>>u1A942EE{3YVS6zi<0_fIv?`@N@)(4|u-!AP_tV82?{pO2w-Xzk@9$#dJ|boI1eJlFN4e_ARom%k=))*ieBBN{bj+8gE-W8ttuj z-n6&heg~R%p7kI2GFjGiXT0)&K3rwV;3CnGr{XC!T9GtY*Vo?t(?9)F4Jj3aP;&`A zc4QvUfu45Z7d;RhJ$+(i^R}%YgvEu~GAOg&^pe*Ftmg#S>I5che3u}%MKwpA+)NMq z=<(Bb^vE$z^9>BmRNB6t)7smnuvz1iqX6u3Y<&=8wUXnwK{r_m8NuGY-EMNup~FJ@ zarG_D0aQ$e6Oals5N`awLl%n8ed72*HV>zq*;7Z@*pdD5_`@}a4WodPOIzwe7bwcaoM)Si9n z`_`}Tvu^VjZO%uav)cuL^XE>wPQYz(}^{oa3t%8te%qKi@y0UUb!-|acj$`LA1nHVwb(x+Y65V4AA0Y zZrExBIg1=sHwvPToNl@hoRopg7qRh#zy}1Z(O4@SdcqtCcl7uXp9)LQOe;46cGr6kP?GhJt8u~G4`fm={08bAe)BCX8=JYoiW?F zZ1fWN28}2HCDyqC0CofLY(Jo4J$!fR10;qKm?i73BN%9icoaluqJRHhv;~J@13uSA zjTmUXUU-U=|0SCZS!wywxwIzZ0puFlJU9(e3o8)F=dXnJW?0+~lN z*CB#zCL9YfvJk$vk^iSOU9$!x^K~izBLt#Tv;!3Y?%#hM)O{~(!uz{3P3tZOm z_B-#=+kcZPAg&VQ)6|SaH&@Vm*&NuBNdSkLlsn;oo=XTG%WQLDx^?Yt z;<;AREg+C`!poH8@Uf!+tqqP>A+Ev4Od~e?930@bb0TU66ub|iNFT>eoi?w<3#}i5 zrb$yKIgf^O7cVfr{9Q_hQvkkYbV}k~%a(4$C%i{{x!(m2YEGfL1V3h}RoH_Id=Ue| z$@Aw&Bck~*2=h!oX49`{O$I4mwQ9B1(t?X%#MS!s%Rv1zsgX71RwkD%F6~YtHC0P) zH^ANzsIRi%x{XLhLX{JY$Ub@YtQA*PI=ip9#3-b-tLRBjXH)w+l)i}p9lPj#H)F9K z92&x=d>M7%WMseVEj%{bvI;rr0PSjiv0IBthZy-xdkF2A&?QbUNqV5 zs0E$PHXB(1Kz3Z-pyA*7&fnl4xY&8{XHomElo$!+VK!-W9e`IYAZ1f?6Q^t?B?Du? zpa*NEv9WXc`8-;2IXOA}JI!Ka0ViqW1<+Dlw@$i!Ut76y1;FGIW(+K+jTvg?DETzQ z;IzvKL?#keaNKR~tw@dg_3vvVMvTCXXf=W1n0@-`N32gDtj|8P`)|MH%u6fKCKQ2f zNJ=dYL=tMnc5E;$!c`EQ#?#T5?J~COj3VETG&&Uz#P(gS zXa-(!K|roT5?6_L@zF;gq9^#2E}hur1&V1*H}I ze_tLaiuxXN&oify`8IKbM%#3_{=-KNC2b97^FuR6_@d3Pw78ut;1JHaLchhEf9!kT z;nZB=D6pN~c=ORIkSM3__!-yoIRJf9P| zzH`)|HsufFlRUAlgiz_*QbyaJ4)(YX^hqi(E) z61@d1U_-z%ThH8qj-AXGfY1{X9%L&4V1p4mRZ&I=DBMOylZpmn)8=$Ah$EB)@7ozT z3E~Kx;d*{XzYOx}viDwg3IU z|My1jbxkam;mCBBl!ZOu;1?wTT)c5(WNlN!XKVd^%@0s7GA0aPJ|Dz3Yuzx-%&b^s zysIG81atbOJG5Eob7^@YwRpH2VWqnF#;q&JaO*5SB?1|43^!f@?m0oQ0auu>??PI8 zQ*8z4dm18~;*tV@r!3fdKDYo4q80{-8!?0t+CKF93#oNi;SAIt1CF7TBD4ZG=8*!g zqWtiN+>^)zo|Vvghg<)?&p35qe0(IQa~3^uHY=yTf|EAA$^eOAWX?Gq6#b`9e2P8oL&Vvf{wQufJh_Y&>F3+K->_iwX1;oIBW!78p29QM$)*yI9&0zpMZ1wQ}T zmW)I>BqRhs!U>pu400P^L0}HzqbYPWCQh7)vT-uLesf9L6F~6W?J~N6bLY-7O*qsh zPaWrE#5HW>;X_`qvBRIU8Iw>&P9IEXWT~a4L{lmiLJB%Vxz%NDZ0-|~bS_>#Yi9vB zJ1Lj85J1C%SKIQ%ldOa5e}dY57htNuRZ*MsC`r!J4S9!Deh(N$bOLHZhLxPVcoqQg zEo{iKA14^zM@^`Y<0nqx#x&n%;McH(84BYjjB-j#fvKPK-`!X5A@k0%36sV;2jsfC znmYu64DRee-3zyXQoz=7SCxiN~a zK)4lBmxfS-&m^rMJ9;Ptn1N2TGim%t=iIvp)!HmP`Dd~u3K|X_xBr0t5LqVJR{~(sO~9E>|9!MgCIBcKn8Cj{1O;L--pr=2qct~;c?Ht} z@`?aIGi?wZioU&nYW;gXVK4XnnT;CO+s2QwFi`jvZ|^71?$GlaY>{+wCeuqC@x*w&IO&_4+k?>&^T2?%VeX9%pPb8CoHOR%9op z_j5M^>X>rfTf21qG`}}Jcu3QlWq?*R5aU7<}@{-vg(;gN?tF zp&UE0@)ial=iWTrh@N@oC-ywr{&+eF`@pXtV1SPfSd7 z;AdQ%JOG!`u3G^HvficoW5j;K3EFvt3=|E{XBn7$QB~z!4vZ+ionh7Z?EHr??Q~}@3K zz~$I?;0Sz*arXR+y>KHMNV_mqWUIS>^;h3i5DmDHxzgxBJoVHQoc>-;Y$L6{PSR~qay211 zISIc)PW+6F47bUb1L8$SM!JQ47L2`qlq3Ue%$PBp$TRu>%P1u{9lfy;11%R`pwpkh z9M-2#9~%zESDRlYfHDL|mQyyJ=lX1P!66NSPkMUV-_IZ@Kv5Zui;u)Uk}FTd;yjR! z$}VdCY-SNwkzGk4s3kK|wIoj>f4)ZfQpHIg61>K>IYVg|u2?>Yf3L<*A;KzQIPM{f zX&~!JfKZi^j<*3`09USDwpU+$mDB!?3kJ7tzhXNPV72pJHZg^0+O#RQ3b}MHseUlJ zg;{fiX-tPKG!%oA0H!M)0=&(`B5ka)1{T*C}6a<6`2pF8m>gf*r zN80>4{VVEgbAxcx@kJq)M3hfRiU#Nl<0gu6CrIg*4ARM5Yp5?^6jv@bTA=CljE~{J zR|*=faaVUb8;IStQ?#iknvI3>6&{gSmV+D@vbuBHn830u)8OVXP^@6!f z+?{VLmn{InUT)LrG>nIR7lN@x1YqELfX6lT#f2G6n}q`ovjEc4lHXh4HE;jWp+oAB zs-|&0<5bV6wo2?CCJn>%6m`OcFGY(f49{-xp3DWJozaJLJ3fhKmG%U&Y$Gu zRC`XT_)$iIUqd-3gkR~r>iMLkB$wukW3Re@7N(z*C*jLaccQ$!l%D@~*Y9r!XQ+WJ z)7aRE{TF7PoS5NkmNjeExB$?rS8pV_gWZNNEiH9i|MTDr3NqWbZFj$??m|O-Ek+{; z93Nk{V6q>N$E0-G(s>pPAR8LIp1~xo4y@cwK$D56vVoIiVwW$UV^C=pQ;w2&k9LC> z6gZpm88gQ_Ll7Ud5!q~Fb!GNJ^Obi z2p9}wi7@nNi?AmX`1cM5J9c&C=OVEUg zZYkwPEpzr!-K3MPDCBCHfa^{nzPAOB|6&4wTz5}lnsMq3gD%b-b$WALXu0u@!+1-! zMe`@(X*ZY2Hw$6)1=!4~lVRZXCNMC36Qo*bbv$<4K_Se`!_8*d@Q$`zIE1pLd21aQ0CV%&YOvy}rv7iGTXBRNyA9vL z#dH9^?aB?AZytq4E8y$iy;ofjh>nhS0YEK2jq2WpXh>gcV5rh{ZS*6s7F9M}0t{0x zUpxWKPhFQl89)@-LNncs{hZE1{nZj2G;k1e3WhjLL0E#g`+9s)sTBZJUTlH|DDx0m zik%0PlvY3|ygU`>F&fPmK~*QE%|13<=fePSkP&02X&W8{-w=Q(-@j83fOd0&3txyt z^*D!8WeV4MKBB5<9G6;nO{b{$4*?Q3(CVz^=h~$H+YVMj`*uH>!g;cktJkiA^5>(I zm}Dcy4R=$NG=1sj?Yq{_J+KtF=7DH3awzi(32ei_Yt%L9^->=jfCoWYML8Xc=DUCU zw||?-dn90R4QpIaCh+gP^O?o>+q?Je84-;k z57C27bO48%y?fdS0yW%#9kAa>ms{#Np_*L~(8g2mUh1@KFwivovbwsM`aj3nSEr?? zFq~qGGu-rt)1O4gU=8LL^QKR| zPD%^W=f^+(JGA#f?({xD4Skf2a1#cc5Pv^5xj;Rg&g$`N!%m$x&87d<)m08GRM{X+ z|5eMo&b|FI8OJpPKqoFW#z}hRiJy(O zKLwg+A^*(E48rJ|_XTG?Q+)SD|A zav2)7o<4b|8{H+nzh8hqC;AdgkTTF`sVzs$_Hz$OUxbc!LuP7PRAi! zm$vgaE?mBdPT*}?kNY8E6~eyEM+>q6{zi>!C+IN>dKNeREI9W+vnBHl{+X9c%Zrc5Nl4(< zHnNkgfRx)H(nwA#V$enaz}~%|VPemZ2ttdk6uNOFPQm_cMo$la{P^*1a|-p>W>(uS zgVS2```pHaz4yQp>^N=49qN74<~-n5US8gV004fF0g$Nc=-JE{koL-rHj(zy?$KW*A0RK{*xysU|i`+={WwiFZ0b*CL77cr~ zo4e>AxE6bHN(cgX4JW?ZhGGZ4{^nbh4rj1U!{d=4e+Ev$`vjRXL`(B2=^`;4Nzcr{ zfqASA8IJSP(BbxMuNNFiD~H?&Zz_0e2^dt+9>mft0-28Xh==|yfTwd#cgbcNEmKoNIw^FI&87!tJm1~zW-f&_L(0;a2aiZ z$cC5E%3A^-UoEc1ix(dG&fk6~_u!KjNR77=<@C=2HUx~6 z193W7h6@19^V2N9tr(T=pc|mgCtbob&pu_dW=yl#C^!kof<^V!$*J|hO0AkSgt32?e^ZI;} zj6ijMbaad(6kWP>$^Fg)rr;7(kwpZN9G+8|BP2ag6rObHenMO@GZr?v&EL^M03awx zpRk|P{xtrH=Wq>5!tB$Vp`y|{NO>tn?c!gaaByzpNrMHBEb zHsn$f##7FW9zWJGM&}U7o`0d2!vy*=r%~WwE(R{oJoAi70hIy5aP(fzW{D`IIfXsC zfnQ|+kekoGecdah<_ZX1kK%44J#nnOin1vI(rFciLXz3!22*qcis^((fbQ$kU0a+eW`?l|+QDQ+NW zCrz-Y@#r5q?B$0k|7djlOLgMBK4#3QmPaY7T#ciMqL)#L>J{Z45e;A#5{jail-@y|=nZW0t88%_}$=Ej8Z1@!`@k`8P z{FxMmOWLf=dU_)8}$XM@x-p_kM?1yPBHQXBwP7N{k(Ta#~6nNE8K zH2+<)f)C(~-^F332)tmmj~Bjw3(bEmWEPZYUUR3S)*H$iVxyt-jvd_}b=peELv#iJ z2oD@OU|T@Mm(trF2jDlA)>0?}mgtz!H~!{t{#rMMPI%S$o>O0^gojryaXlWC5N7m9$Vt7goHRUi>-e@SVSj% z3FS&7VBB^Tj{gt@LB`T!ZQvViN? zZ;;wIFuP$hHTnWarb>giQGg~vJ`C-hdkCQ0d29x-&`~IW;irJ2`2#Xl`J5*Vb{8iN7Bj>gOiyc6Dxd!y=lX@HXN0 zD#x5YdVQCn+n;KyS9sG! zsJH#J1^2qEf8 z8;@%sU%Wzqt=0JHPXp-}b8ivDI28;e&lLbDDzBJ;+T`!Q|GuNh>f^ol-g9h0wenOh zs8y)VEPzk_e{aCAO=L&42yAMqE1g$>Mv^afPnHA$fjKL@ma|8okai&crz%-|21E99HQ>d z$DB1aBZXn94>s>aap>uB|_)+4FfpxhOE3m!Tir=_%&yJovZ8tF(ef|DjvW7RY z6?@fXD`9X36zJ}WIP}`9(3aC|Ge)lOLkYf#40{E-jh{U6BjzEZUD%j`kSrQ7kWp`t zhsIByVncbY31o>27BAYvVA6z#?|b0G;O;2}dfbM8nL$8gA4Wz8X-;1bp846N{3$rl zw6-w}f*M(jv1~m4G?-EZ6KVS^Y2kJ6ZKpMM6*QT7b8PkH)5sV|cWamoLVB`T?Gr~aQuuaU}|Bgc>IZ|2l*Xs!a7D|OV_CSHrO z01;zqs;V&&8He_uFU-SLY=9I%L8!7=f$QWKPhTV+ZA5K&(R)SSQE8z6C;G2MKgtL+ zl!I2P>*cHUr&2`pG*%3csC@fz$<1065KDL3tLYrN^@Qr*l&KQENY4&Gm^| zym-OU=-BX2XD^sy^OwwY^BHg5x`}t-EsKs%wk1C6Y~CWQ+mccN>B7v%cP%vD8rXe@ zt%ZQo&fnNe@IH!)^7gIks3{NP(@;z+kiZUYIGZj{2KUbWH(q;y1Hhu})%yiz94xS? zn0Ro3G)zpFLnNBv0)Q}q${y}p~ z(;Kqk%BPK#wkgFLFt*T`ssg6#=48fkQ|__r*Dg7btC*jwrQW-F>oWA-TYyeGUHVx; zsUSt*dMvfIL84&mt-_)!Er}_*aY43}n{44+#(85`6^MaIQfz>Q2YbVD_rd2b8}2{8 zfK1&*fp`CRf9H2Z4ADl{$*+?@HKG2kw%(()zJ^r_#Sv1V=q~p%-=$^t zCOvhX@>dBACr>h*6a}Bk3_b1?rVfiKC?U~ua1()+A_Hldh{!)Jt#z*c-vPKOYO{br z1%OlV@dX%4o;_#IByf%m_UyCI)I1EX3C}(EY-J7|oKq6r7VyVBFcv^M@*ocfh_wN9;HGP83LZuO(9GZWI1Kj?ovohI6yUJGp2yag^03?|t5a$VCmrr-FpKl?Lv zdUOwnB&0G=@AtP^D(!l_1^@pB0aE|3AKKTMs`1uB$aC@Tuiw^Sm#<$!F52ouIqh)e zuVKk`4uGcuODUOrbVEaZ1GhbZ8F&*Rs|3q5dby`oDd+@qhcDIu-8TeRaNSRn7TR_EK9{P7o-E zWP_;(0iX-8Os}C&uP1Hvh?gt_H=9D-gjD-an+C6a>^RrHbHFEAfa?D&{P2{9N6L|i zAfWc3N(3kCB^an|P^(a?wg`JoJuE7Mqmfgj~urrq7=5N`jGORkCrLHgj70!_6-|KtQj`J-zRL$?BOo@c%ae zoIQJd_{kFoLFh|B;kRJsxYaJ-ya8ad$F}6BvNG%xEv&0dli9^2nNs}WRQq4Yk@gHG z6h#D#nAi~X^lh$wyh$q;k0l6o{LvC9rQHslR4q6u26b|YZ6~^L zKDztbhEgZZ6?1S4Cs7gH{fdf`&nv4cJ})gV{k*lU>GR>khe}5-&-w48o_oH#yZfbo z?mFOn>-E5qC=2g_G8X`9$N=PC)FcoPu~Hy{qGz7`fsJQGn5OZ4xnJ7E`Z7g_4XAw z6hH(p>gQg3@kN8VXiq%xgi{TAIuJ_zt0+}enr!3shy>Ka3_lsIY{q#<*L6FqoolEr zz#-9qN&o8zbj#sWtYzcI#YMgLt#5r(bZKoW52oUecVA>;LTpPCBC6@gk3-3F)OEN^ zMzV!#u-tb&Cv$)kHO-kn1Al@sP@jFAVagdYk#>TNrY(mvuQ83uL=}L$Wq`WL5XaO? zuIIj4?Yr8IdY2(fC?>5lQFaEADTc+y*d*pIOqq$6g3rnV#!a3eOScdE_Uk9Im!~x- z<)FGeJ<7px=g!1I`1h(fCw_7bh=>!YCJN2o2;Pu~VgPXItbR3^iY*O^v(qpGUn zGUKdYV=~ZN(2u8gcD4^}Y-t?KAdSHtT^;HKxDQ#DA3556Ar)hbLd_e1np{c1QvlG? z^AXQoJ_AqV{yS;h5Q}H(PYz_IR?JP$Vo_F7QsU}&ZEl^&V)7L*phP->%TReG`dPo; z&uw6Beo26JYI|@3ghoHe-e=ufasXy^&*v5GaR|VKAzlfID)` za2qmmm_Rk9S70eYS)1ASP+eZI%~eO6B?@Gsfy zKmRk3aYisB{*&a)L?obfZp72Is~2obaWbD zp<$rAx#1f*4a;lGn1qY+uC1{as%lxw*5CWf100AbLXq$l z{r?W8BMIFP!$NKO%Ebh>GT4>UIJAO0Y;z!>9F9eEPS1$t#2&!_l^GxZ?(hC?&cn^* z0ak^t1hST}B*gjK+WPtxa&``lVip6hDJM6dO^i3<<`N5xjIq^g*SpMS!o)Gqx4q1Z zslp3UZA!Y_wgc<|3Gks~$H)p_v3K8l7yZXgH%w*WV$lBa8rZ_1mc@%KHa>yL%RWfC zmsw$P86abTjfNt;c$p97z+5y5b1B)XZ0-7Whk0I})}YKq7qVnCF6^hL6!_N$08YiP zckJre6OWht=!v75rB_3b`7TIuGj6pJRtuwSXA5aKLom*8`pXP*3#UkXJN$V_G?ich z2boTL9WVLan0joKN)SFkJt=%+Q#JhYWwy|33hpyYIUP1}0x_cxV$mTsYY7;DQbG}m z4pMs`M6N0n`8XR|C#w44r`Yf(ai-OV*E)%Z;Asp-&YeB(0>C-eWwHge4wW^WCSaUo z6CP%C^{#FVNTK(3(6X!}?M!33Zx~a9;uAs$K818Em}J9PtlGLN=L#%OdpX!lo;1Rq z_{sOE-^Y~q;}RZp1(MR>1B`+Z zy4E%@i*YI?!FrsLwv?8<`EX7#WH|208i=gysjw*XKr!u9s0 z0WXmTZ$s{So4Oa@wkqhPsN}X&7F6RYe->8XPEMO5korT1vG3wk*+!S(!g)j}pv*G! zh(o<6O07KO5+M@JW)O%(Jh99J$YZl>3Xl5G0uT2?_-Q8X-h=-BFhS%9bMBAA9XQ73 z)flYfoaPDu`h1M<9|mYV%J)x@0qFb65VZ97uLD*JpuCFP%`IAz8ku#Q^$I1*z1uhO z7&r*AWG)idFsR5i^w*1_xfYTIlu@owR#4kc0AU|FYM4#KUFY$~{|;UJ8sxI4X%RNK znqQV)o1x%(IQin~s}^4feYq7w3>k7ZK)}&v)#g9Q-&Cru%`d``QhRN1rSVGX)lE=q zPqn`cL52(&3=kUXhJDDxPXeNRHi`m`x&;Cg0|Nt{!KhAtWdpJpZ$e}gMeV<6(JVIj z2CUB;T>9TZklsZA5M^643Pf`b4qeT4nDjAIo38!$|Nh^zxmO;gQ7ipl!J5Jn!1mXy zujzg|f9cXJoPs`ENY`QJ-1(GW+w9DRYu3DbuXQpmtfHn4fz}Ls8)h=yX*CpMU&q{B z@4MLieX)h-`+1Or-h&?@_u_L_$;Zufgxao&lO{GHoDEaxkpH9fowq`u$pd{(VTeaHOtO5q z-19MroHhf+p7%^xfL_f1^R+}k!b(_Zjg95F@3xW-UbRbL4RYT(tkWK(_yTSiSjaZ}GQV@>@_9E(`#O(#13$Z4^wsYHNWP8CRSLJ> z{rgZ)_H%V`O${^baK#aRp-DPJM~<*>e&@Tm42^;T*x#Oe_9u>jqjuarbPV$4TfTgS zL+-`J*Tz)}uJl)@ayetMgi(|-VW$b_VY>=v0ePslLEG)%PACPhg&YPe7m^OYJ?K z=KCN+NfxYNB0^9s-G|W7FsB4m<{{>wtj3fjs0@)TSUQDu3@2HFRzfVjM(G;}%xcH& z#@9euiI{q|1UrA|zY``6y~{nI)6>JI)aL}2&~6*PJ5p9#ZiQ(06UAw@hKIf+6is*6z zHk-z2ofq@XDeaDeP@i@s$Td0?SCFJC09<8~%~b`1i)ZWxyoG}hYnJ15(-%X^4fy6& zqEaj<%yy%~e){B3>?cqDl!?JBZMn~C((%WU9ginim6A!^auix2{i^9b)?dm36bR(k zmjtP$jGvWHp!oSB>1aZaWV=fHwdr-jBXDs+K)|304Uq?F#ucH z4Dh)eKE}k!!|y%ZJde_;MYNG}asf;7+n=!hkoA86Ysb!O+3#RTzRYB-sV) zv7jK|O*uLX2>ixdZ#hYEJ)*JjSVo)$Yyit?vH~)pSOQ*UZ4DsiszW?C`3UMYC>xNK zm;#sQdG`>6{;6mNUG;y3N5_0Pl+8a52bd|GMq9XvTiECs*)i0{D9y^Ut)({KI<{3p z@JJ#%*aNxa6+1vW-inDv9!$YFMuEu_P`>$#c%%LCq|0XX_W@XJm*{Pa&N+dbHw&a3 zmLYCG2Wb;+rDt5_*kdbJEw|^M5#s)`jU4)d4H@{1&6qL*-#;b?2d=i%RW-vviTbOe6mYutB5djelOhDFvkWflRMz;Zcb|JFbieqs}W##)X_3tkhW5UB= zCO}ZU5IuL5E&>F5K7P>^c>VqN|GcKD<>c7O(`+nGEYp~EKNAo7VlIASG6OkFavZ={ zL?)0N7YJ!50i(w>0Jaluf~-9AH8v`h6mKm$eZTc9un0?ZfR#3kCeR9q6N@dG6RbDb zLICz%$}V=0lGcDJ)YD3AhXkWEapkh9mJsQ0A^ywFYZiR>34?6hh(0!A@QXHLD4*fv zPZ-aF#y# zWn73fLr|#n*$Wp4R)N@24aMjL1skoj8lJyeR1>frUxMgmBbm)XUaJsxjl??0<`<1s zHsEsT@c?+O(-`=8^7e_4>7x2?*R1IY^?PHZYN$ zU=k7mse>T=K!HM~hTMS8A?FpqsGy<$*SSk`2e+cvmjm$vbQ+r|;UsZxco+aA1@3gN z$MIxsYgf;+d2=WId;m}?Ej@(?{g--D0;+$MYrprI_j};~D|N5N zz%wvt6=?86qIZx}2DZ{VJPYgV3aR&5K(phV@+WD}U17uJTGynPT- z+Q1mJq$Es29263`(2DcZYzuP$vQk1VgYSi6CGER%fdwEzl|%6A<+I5OCfKTFOr3$q zvXT+w(K>l`KiXI4#Q&Y09i8XOt83|$(DtMRS+Z;~ z>3KC%fVu%A@pl+M#*#_vk8sVJ@ItJIow%RF;XGK)Rq&Y>n4}3A?J*B|Gzb7{{nw_pwo#fdkRz7?uw^0T_d5 zIePznT;Mm>Vcs zLOGKIAowO;67mvQLkTgBz_`7u+s;u^YDAm}TYK<26iAwzll|)N{oe1TKMVjO35gv# zouw>BAZAZn@X-K(Bh1wD>KdF^MuPe;w6V0KrjVLyT2D$^6c-gC2?UZ7%7E=~|BvAC zQjMi|G6;TH5SG#S$A^Wib3&6#OnkY48?1;s8l_y+U997UQx&=F6e0?%cK8 z-g%Gq4|SsS;Gf_O^YO3!`g41Vh1O*?p&JIv-Hq@3PJ_<*Bz{suXY_d^(81LQBCXDK9V@LG1 zp#z??1@mUoiacaHIk7h2h?|%ihh2Fg(exdEniP?A&d@)uB-fqYd8 zJ#9#BUZL?i$$#*JAGpo04XfZ##3Y`0`d{>c!AXCv#mDj` zXePsXlluJz!ly3WhtdEf2M&G-yYcDPgq-*!Cwd0T&xn`}1k?gIFXF~4w;^inpqp^n zc_0Is=q_bZ{yw%Rl>*Klu|6 zo!P@>P%Be`OgM%DSr0={@22Fw_07#mD>+5_bNY-NJKB2n=|wLaA9$pi+1W4wIn^~s zzKxsa6e#^cv;dm`_56IjZ9WPy4WbaM>;~!nC2qd6&iC#F8&PgH4@@v`(34kme~VOE zZ}2tJy^HjH&rrYW^uKZAGPY5#LN;or6*e9KYoYC?&FHbjYHF&d&aH5p`8+*-(Sfyb zWVIzxO&-RUJFyW{i||1Zc;JS!18sq9vShujllB{7WIkNOf3SQ;7y3i28oC>*s46n3#XU1GM4A z6VTUk4OT$#3>jTaNsybHvuQELfj#&jb)Jfk!KjZv{#+;N zKl(u_@SBL4p54i{&nKu|2Y-1N&A(d4wPaFLr%S*z5{#yqdjbCd1WD=)t);|k00)vY z^y%{#96s~jdvB9Xo^xfyF%+mDz!})YjKb%8KaU+*5_V<}#*QBb!x300)hc?F&sVNm zu8x4p08cwJkgp{Vmo)sJ#4`RxQSQs~L-+38`Gr?(9oGukFjpK7DWjKf1l>+*noJvbKpVluf$@_SX2M+9aU?;;J8^=?O+yDU++rb8wSr*?$h(C?uz+DC zA^1%emqRP3G}wWa*|lpI?Kc0f8Ejx%dxtwXqOdm~I(!fybDHB2+`My_Y?1(jc0?15 zs|n1d6~*s;^P7LIEFgg;EI{o+Nrs2Bfc@485n~xDzENYCFw0=vu3yhTqL&iP@)3 zD@&|qP+zs%+PGngi#Id0QnLow=%mv3(V0spFXVW`hCo_%IUw-)v?CvQ?E9f9*JNB} zA|97rXSe;(Z?AjL4l6Itu%g^pE5hz&nBVq-3okVbm>(Fk9j zeEKOHHe{glGgQ{2@!A2@y~&{7>iM50EtNNbwEw~c#QGDvPwBjndRc()BFMb3+>!JYXjqzpN<3swe|m$PT)pEguGqJxNg1gywzl1T+s(6Owm{ zR!ohp@!!H2S}0*;XI@!Vj>e+n79EO+=GMmWnueOt>c-ljs=6xwrlzVj`}eg~@9o}d z`Di^(F)ID$&Fl30kHH^lbN+!dX3AaI%Mu}7ojP@bEb#`I(SCdc@&Wni!eARO9O>pO z*U1WQ5X4U6Bwb;%yyn<4u!J}=sm?unU7-Ht<4>I5fQHGIGh)6GehC9$k8q27=0FJ7 z5T`+N21RI+In4iI4D)3<)c?h=gAr3dEGaL0`$cZB-u+&3CXe2nZVCX?-~nu@C#?GOex%zmj0%%ukto6{9aMWi zsx9cE6DaF)|tm-7U0u@1FVQeA>LC0p`~1eo)D))XOu zpv?fRYX6?%{g(}R6GS6Tbk>xo&Be@$D8LJ1W2lArF^Zi`B!e_RnBgtriL6+Ox8v9$ zwgBnybVi#m!FEgm{P-!rU~qx0lyh}tToPw>BB>VmCuU(74oo8v8AZmz0EF_~2pQ=5 zwVU?ghacfr_z58Md1ek&yZMd`7BDYp1*=lFe2;Qs-3<8G-8kt7WIns}`REfB-v>#$W%I%1`yaYJHUt z4<-cm*Jo(aDtMpeBtC;nkiI@i>-Ge+ z>Jxkxkb72{9Rc*5-e*2vBrxbb*Z-3mQ?1k!lve_Y_mEY!w=-B3c4r+~NFME1VMTg= zL3AcG7<4L=nkON$@?E_cUBC>SfEf0=atX9@3|F?4xM@(^kzyYvwLgdV!0T_mZ58zm zHfjQF$(2jFCt;d0OQMZz?rP>xaZh!i_elZC#z zSwKxgi3*2^PWp9IT(#YD5aM-lY>Vx7-X=GWuwQ&MuQ#Qv{&xlwL78-Gje?C@}+nLj>my0 z4KrC^OXBygUcU5zdJHQyn8y`gqh(vu=kdvL=V=K(>J+Wch6cjOG)8h^Cv5u4eNdxL z$j;0E==t6+*@USxZSI04Hgnb-n~5c~L>dWzduOSCJNNFlXe_1@Nx71!`6Vr_MnG~H z0*?kuYH9F;Hj!q;$^4_aso9Nxo-lqOZ|r(3w4wo+G9CFun_VgRqf49LGs#B7GF01M zx^&sq#4T8fZ36Mu$u4jDpa1ymv(KCxZZl#`JNA!jB*Zw;joMw}q^@;MN~UQgY;6{g^BfXoaog>8ziHq5-eYbvi$@@euL6}g z03s5pM9}L|AP`=lbYI+pdNQ5N>`Xw!#kP_m9sMW0iou-A7y%yZfEjK2 zLjXlbsL$1-*T1E`-+!h5%TW`M3AP>@ivZMn{ z{aw0jroBAyDRdR1=(?aZ^qo&elJ`06HYS_KKU zbFW@`pvZKsR`4DL22VgZckV$pAk5(Wg;Nho1)k3o`A~kgVBx|}Ho6EwDhC7xu4heWdBDK0)@(sGz#lX; zHoiWY^#A!@eIfnKWY~sg!OtYcoWn`UXsWm<>N#$ND_33Zwj5jNpbcwWiYYV6eckPL z6mLYEJ=+4-L3{!15vtw>4OKU$xB-uD{s*bQfWA}CoKhP` z!#2|xf+_9%qdxj?Am7z#sFP7AqE2u9j3)DFW2jiTUu2U=&vjDoNABDN$Rx|~Mr!_gK6mWygeTApsRsHk z?a_+TT*p$Bg0Y*RA>q(ITByoyDl5wNH|0sHM~-Oo%+HCh7TVB5vZU0p74tp z=Hfjd0wI|O!1HG$`oO_2b8?O%V+eJ2XxjWI=&`GWIzh^=(^^@;eK_)Oy?x(hIjb3{ zI&I2eTjMj!{F!So4Q)lA7k*%Ud;iRa4C>_uvdo-50R|>QBub08=t!sNtgbB~`@x=_ zz;GITKqJky!hB{& zwv!2Ng;*Ae(MlQDfU)glpOXoswJwWEPENESe?Ky&Nj97zG5$gRwinV=G0eqHMVY*w zZFE;MxfXt$@U6_J%yPaC!mQq)ER2m$vW4(6HUQ!_AdrenOuWKo_izF{A}5K2JOf3( zTJ+$fr%wGWAvyWe0nD2pI${(?j5xK-^C$?H@s_(UFWy7T)AR8

FST`6crIi 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

In general, all we ask for is to keep it nice and civil here and don't be overly toxic.

    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 e1wQ>N@c#$!2%^1iveEef0000fz2EyC^UX8q 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 delta 1509 zcmZ{kdr*>D7{>9Eqm{SpvY04Yv^$$9A94}wA_C5;xr+vrn5`rj*rKT*T28c%WwRGI z2d#9s#Iha5OmeY{V(x5PtBHi=-9a-gEd>& zC}biE2f%R{e*l9bUX zJ#UvXZIIH7c5n#+6^Oy2sZ;{aS^)qEMTcTS0X&KXP^p+uYN#(fOK>78ibzRK6bZN~ z!f?tSU#sKK;d6*&0FNb+g2HfkDjEQ&0EvphkTF&hOCe+MDC|czJS9WOPD$i`WcmNG zQ0o7|(kR;md*uPuhMub=4}h z^#vhALqla{Wvi>8RgH~}D=RA&i^Xg9VyCtHS2fOt(FfqveeeYj?0|vuJz!5TXjFi68qm}XzCH(CE%hHO9ion3Y zxw*L+R|V z=Ct9}6^9ly1Y$c7P9f2=`X~E(Vn$FK9TNCIj<~_yPFk0-d;zIwS}=jNw-43jB4HkV zd;i%Iyd3aV1=RG-hNYa=JYdUvUCLWDuGkJd33#BIUMo31lZ>~_9Ab;QPHQG6s7=2e z`4&Hxb5td3xO&8!Q+HTRfVv5CXPk%RmL%I{zb=f1{%_|2`s zg@{JU-GzgrIzmIoo7x`gBesIq+R%rnYnXP5P4i=#({G1}SWl#N3DN$pcm9@VM`W;6 z{Y6=p`d23s58f%$hHRC2a(-{h_@W!5ji3{T?w`^ZaQ8VWx5;w?>h88w$rzO>Vfafu zl``k(D}x1kjT@<&w&&TP7Pf)6Nj|gu&>$%csix^1H@p5t&waGhM!B|YQ&OkE!)gjj zM3auNew=)LB{?6L`z0;kMX-?}bAk4MCa1ytm1*?viF6*8UQVR&oaxYD*NLn3;wc$6 znp>1Qo>!M+A+0WEy>}m?+r!l);XL|EQ z^y}H;II+#-vHb23Z0Xt)s2S36S#t4BZD}P7v0Vv~>s81q$m(Th7KCAE|01Tv5t%3F z#&70rqa!EKA?vOs$4M@Evlf4~n#nv5T76BVli($u(biC;#esiTvU+ahcCXU&qw8xU z?P@$P)_D0;O_sL@`2~ia8dB_ckK+wIG^IW0B~_n8Fo_}7$}*f~I!CH7t0!Ukh@{iZ zV3$bsj$bt6sobn^uPfl)u>c?T*vRwR@TZ13WB&Nk9HQx-PjCF;_W~O&9tn`kRS^zR TQKX`G|3EnPYs#(Agxr4t_@Buj diff --git a/img/feed/cart.png b/img/feed/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..41d054067e3e3eaa5151f214ee76951f53b2a13d GIT binary patch literal 5130 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 literal 0 HcmV?d00001 diff --git a/img/feed/friends.png b/img/feed/friends.png new file mode 100644 index 0000000000000000000000000000000000000000..de53aee2c17c8abc2e398c32a29ee634ee4b5aea GIT binary patch literal 5423 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 Ct9g?E literal 0 HcmV?d00001 diff --git a/index.php b/index.php index 3ad7f6f..8a064ef 100644 --- a/index.php +++ b/index.php @@ -1,9 +1,122 @@ - 1, + "e6a76346d3ece5e9891c4876b85174bf" => 5, + "78af60b3e80630cc8b2f4372ab1e8c8d" => 5, + "c8f51135774e7f4e4027921fe947f67f" => 4, + "e6a76346b3ece5e9891c4876b85174bc" => 4, + "doodoku deez nuts" => 1, + "OneYearAnniversary!" => 9999 +]; + +$Errors = (object) +[ + "Username" => false, + "Password" => false, + "ConfirmPassword" => false, + "RegistrationKey" => false, + "ReCAPTCHA" => false +]; + +$Fields = (object) +[ + "Username" => "", + "Password" => "", + "ConfirmPassword" => "", + "RegistrationKey" => "" +]; + +$MaximumAccounts = count(Users::GetAlternateAccounts(GetIPAddress())) >= 2; + +$RequestSent = false; + +if($_SERVER['REQUEST_METHOD'] == 'POST' && !$MaximumAccounts) +{ + $RequestSent = true; + + $Fields->Username = $_POST['Username'] ?? ""; + $Fields->Password = $_POST['Password'] ?? ""; + $Fields->ConfirmPassword = $_POST['ConfirmPassword'] ?? ""; + $Fields->RegistrationKey = "OneYearAnniversary!"; //$_POST['RegistrationKey'] ?? "!"; + + if(empty($Fields->Username)) $Errors->Username = "Please enter a username"; + else if(strlen($Fields->Username) < 3 || strlen($Fields->Username) > 20) $Errors->Username = "Your username can only be between three and twenty characters long"; + else if(!ctype_alnum($Fields->Username)) $Errors->Username = "Your username can only contain letters and numbers"; + else + { + $Blacklisted = db::run( + "SELECT COUNT(*) FROM namefilter WHERE (exact AND username = :name) OR (NOT exact AND :name LIKE CONCAT('%', username, '%'))", + [":name" => strtolower($Fields->Username)] + )->fetchColumn() > 0; + + if($Blacklisted) $Errors->Username = "That username is unavailable. Sorry!"; + + $AlreadyUsed = db::run( + "SELECT COUNT(*) FROM users WHERE username = :name", + [":name" => $Fields->Username] + )->fetchColumn() > 0; + + if($AlreadyUsed) $Errors->Username = "Someone already has that username! Try choosing a different one."; + } + + if(empty($Fields->Password)) $Errors->Password = "Please enter a password"; + else if(strlen(preg_replace('/[0-9]/', "", $Fields->Password)) < 6) $Errors->Password = "Your password is too weak. Make sure it contains at least six non-numeric characters"; + else if(strlen(preg_replace('/[^0-9]/', "", $Fields->Password)) < 2) $Errors->Password = "Your password is too weak. Make sure it contains at least two numbers"; + + if(empty($Fields->ConfirmPassword)) $Errors->ConfirmPassword = "Please confirm your password"; + else if($Fields->Password != $Fields->ConfirmPassword) $Errors->ConfirmPassword = "Confirmation password does not match with your password"; + + if(!isset($keys[$Fields->RegistrationKey])) $Errors->RegistrationKey = "Invalid registration key"; + else + { + $KeyUses = db::run("SELECT COUNT(*) FROM users WHERE keyUsed = :key", [":key" => $Fields->RegistrationKey])->fetchColumn(); + if($KeyUses >= $keys[$Fields->RegistrationKey]) $Errors->RegistrationKey = "Invalid registration key"; + } + + if(!VerifyReCAPTCHA()) $Errors->ReCAPTCHA = "ReCAPTCHA verification failed, please try again"; + + if(!$Errors->Username && !$Errors->Password && !$Errors->ConfirmPassword && !$Errors->RegistrationKey) + { + Polygon::ImportClass("Auth"); + + $auth = new Auth($Fields->Password); + $pwhash = $auth->CreatePassword(); + + db::run( + "INSERT INTO users (username, password, keyUsed, email, jointime, lastonline, regip, nextCurrencyStipend, status) + VALUES (:name, :hash, :key, 'placeholder', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :ip, UNIX_TIMESTAMP()+86400, 'I\'m new to Polygon!')", + [":name" => $Fields->Username, ":hash" => $pwhash, ":key" => $Fields->RegistrationKey, ":ip" => GetIPAddress()] + ); + + $UserID = $pdo->lastInsertId(); + + db::run( + "INSERT INTO ownedAssets (assetId, userId, wearing, timestamp) VALUES (162, :uid, 1, UNIX_TIMESTAMP()); + INSERT INTO ownedAssets (assetId, userId, wearing, timestamp) VALUES (310, :uid, 1, UNIX_TIMESTAMP())", + [":uid" => (int)$UserID] + ); + + session::createSession($UserID); + + // Polygon::RequestRender("Avatar", $UserID); + // this is just malwarebytes's avatar - he still has the default avatar and is banned so eh + copy(ROOT."/thumbs/avatars/32-420x420.png", ROOT."/thumbs/avatars/$UserID-420x420.png"); + copy(ROOT."/thumbs/avatars/32-352x352.png", ROOT."/thumbs/avatars/$UserID-352x352.png"); + copy(ROOT."/thumbs/avatars/32-250x250.png", ROOT."/thumbs/avatars/$UserID-250x250.png"); + copy(ROOT."/thumbs/avatars/32-110x110.png", ROOT."/thumbs/avatars/$UserID-110x110.png"); + copy(ROOT."/thumbs/avatars/32-100x100.png", ROOT."/thumbs/avatars/$UserID-100x100.png"); + copy(ROOT."/thumbs/avatars/32-75x75.png", ROOT."/thumbs/avatars/$UserID-75x75.png"); + copy(ROOT."/thumbs/avatars/32-48x48.png", ROOT."/thumbs/avatars/$UserID-48x48.png"); + + die(header("Location: /")); + } +} + +pageBuilder::$JSdependencies[] = "https://www.google.com/recaptcha/api.js"; pageBuilder::$pageConfig["title"] = "Welcome"; -pageBuilder::$pageConfig["includeNav"] = false; pageBuilder::buildHeader(); ?>
    @@ -44,58 +162,80 @@ pageBuilder::buildHeader();

    welcome to

    -
    - -
    -
    - + +
    +
    (placeholder video)
    -
    +
    -
    -
    -
    +
    +
    " id="signup" role="tabpanel" aria-labelledby="signup-tab"> + +
    + +

    Account limit reached

    + You can only create up to two accounts +
    + +
    - + " name="Username" id="username" autocomplete="username" value="Username)?>"> + Username != false) { ?>Username?> 3 - 20 alphanumeric characters, no spaces or underscores
    - + " name="Password" id="password" autocomplete="new-password" value="Password)?>"> + Password != false) { ?>Password?> minimum 8 characters, must have at least 6 characters and 2 numbers
    - + " name="ConfirmPassword" id="confirmpassword" value="ConfirmPassword)?>"> + ConfirmPassword != false) { ?>ConfirmPassword?>
    -
    - - + +
    + ReCAPTCHA != false) { ?>ReCAPTCHA?>
    - + +
    -
    +
    " id="login" role="tabpanel" aria-labelledby="login-tab"> + +
    + +
    @@ -112,4 +252,10 @@ pageBuilder::buildHeader();
    + diff --git a/info/privacy.php b/info/privacy.php index 627ca49..d57a0d5 100644 --- a/info/privacy.php +++ b/info/privacy.php @@ -16,6 +16,5 @@ pageBuilder::buildHeader();

    We do not willingly give any of your information to any third-parties.

    Additional Stuff

    We do use cookies, and the only cookie we store is your session cookie used to identify you.

    -

    When you play or host a game, your peer may be able to get your IP address. Click here for more information.

    diff --git a/info/selfhosting.php b/info/selfhosting.php deleted file mode 100644 index 3b8ce7b..0000000 --- a/info/selfhosting.php +++ /dev/null @@ -1,21 +0,0 @@ - -
    -

    About self-hosted servers

    -

    In , games are hosted by players on the website that other players connect to directly, instead of conventionally connecting to a server hosted by us. This is called self-hosting, but it's not without its caveats. There's some small security stuff that you should keep in mind while playing or hosting a game.

    -

    For players

    -

    When you connect to a server, if the server hoster knows a thing or two, they can get your IP address using a network analyzer or something.
    This shouldn't really be something you have to be concerned about as they need to have actual malicious intent to use special tools to actually get it. It's not just right there in front of them to easily take (like it admittedly was with GoodBlox). However if you want to be cautious then it's recommended you use a VPN when playing, or you only join servers hosted by people you trust.

    -

    For server hosters

    -

    If a player also knows a thing or two, they can get your IP address using a web debugging proxy. It should be noted that clients connected to a server can only get the IP of the server hoster, and not the IP addresses of anyone else connected to the server.

    -

    With all of these in mind, have fun!

    -

    Some additional information

    -

    Resetting

    -

    Kind of like the ;ec command in Finobe, you can say ;hxiuh (or ;hx for short) to reset. That's about it.

    -

    Assets not loading

    -

    In order to help improve security, roblox.com had to be removed from the client's trust check code. Because of this, assets using www.roblox.com/asset/?id= will not load.
    To get assets in your map to load, open up the map you want to host in a text editor (like notepad++) and do a find/replace operation for www.roblox.com/asset with chef.pizzaboxer.xyz/asset.
    We may eventually automate this inside the client, but for now this is what you have to do.

    -
    - diff --git a/info/terms-of-service.php b/info/terms-of-service.php index 76b5cd8..39bcfea 100644 --- a/info/terms-of-service.php +++ b/info/terms-of-service.php @@ -14,7 +14,7 @@ pageBuilder::buildHeader();
  1. Don't say slurs in a demeaning or discriminatory way.
  2. Don't post any malicious stuff onsite (dox, IP loggers, etc).
  3. Don't post racist or homo/transphobic stuff. Hey, even if you don't agree with them personally, you don't have to talk about it here. ?> -
  4. Exploiting is not allowed unless the server hoster allows it.
  5. +
  6. Exploiting is not allowed unless the game owner allows it.
diff --git a/item.php b/item.php index 3bff683..f9e7a07 100644 --- a/item.php +++ b/item.php @@ -1,23 +1,26 @@ -id); -$isCreator = SESSION && (SESSION["adminLevel"] || $item->creator == SESSION["userId"]); +$ownsAsset = SESSION && Catalog::OwnsAsset(SESSION["userId"], $item->id); +$isCreator = SESSION && $item->creator == SESSION["userId"]; +$isAdmin = Users::IsAdmin(); if($_SERVER['REQUEST_URI'] != "/".encode_asset_name($item->name)."-item?id=".$item->id) redirect("/".encode_asset_name($item->name)."-item?id=".$item->id); -if(SESSION && SESSION["adminLevel"]) pageBuilder::$polygonScripts[] = "/js/polygon/admin/asset-moderation.js?t=".time(); -pageBuilder::$pageConfig['title'] = polygon::filterText($item->name).", ".vowel(catalog::getTypeByNum($item->type))." by ".$item->username; -pageBuilder::$pageConfig["og:description"] = polygon::filterText($item->description); +if(Users::IsAdmin()) pageBuilder::$polygonScripts[] = "/js/polygon/admin/asset-moderation.js?t=".time(); +pageBuilder::$pageConfig['title'] = Polygon::FilterText($item->name).", ".vowel(Catalog::GetTypeByNum($item->type))." by ".$item->username; +pageBuilder::$pageConfig["og:description"] = Polygon::FilterText($item->description); pageBuilder::$pageConfig["og:image"] = Thumbnails::GetAsset($item, 420, 420); pageBuilder::$pageConfig["app-attributes"] = ' data-asset-id="'.$item->id.'"'; pageBuilder::buildHeader(); ?>
- + -

name)?>

-
type)?>
+

name)?>

+
type)?>
@@ -55,12 +59,12 @@ pageBuilder::buildHeader();
description)) { ?> -

description))?>

+

description))?>


type == 19) { ?> Gear Attributes:
gear_attributes) as $attr => $enabled) { if($enabled) { ?> -
">
+
">
type == 3) { ?>
-
+
sale){ ?>

Price: price?' '.$item->price:'FREE'?>

@@ -77,7 +81,7 @@ pageBuilder::buildHeader(); sale) { ?> - + @@ -140,7 +144,7 @@ pageBuilder::buildHeader();
- +
diff --git a/js/Navigation2014.js b/js/Navigation2014.js new file mode 100644 index 0000000..ff0c3ba --- /dev/null +++ b/js/Navigation2014.js @@ -0,0 +1,265 @@ +'use strict'; +$(function() +{ + function callback(obj) + { + var mainHeader = $(".nav-open"); + if (obj !== undefined) + { + mainHeader = mainHeader.not(obj); + } + + mainHeader = mainHeader.not(".nav-container"); + if (item.hasClass("nav-open")) + { + item.toggleClass("universal-search-open", false); + item.addClass("closing").delay(300).queue(function(metadataCallback) + { + $(this).removeClass("closing"); + metadataCallback(); + }); + } + + mainHeader.toggleClass("nav-open"); + if (obj !== undefined) + { + obj.toggleClass("nav-open"); + } + } + + function scoringValidation(event) + { + var codes = $(".header-2014 .search .universal-search-option"); + var i = -1; + + $.each(codes, function(maxAtomIndex, nextElement) + { + if ($(nextElement).hasClass("selected")) + { + $(nextElement).removeClass("selected"); + i = maxAtomIndex; + } + }); + + i = i + (event.which === 38 ? codes.length - 1 : 1); + i = i % codes.length; + + $(codes[i]).addClass("selected"); + } + + var debuggerContainer = $(".navigation-container"); + if (debuggerContainer.length > 0) + { + debuggerContainer.mCustomScrollbar({ + theme : "dark-3", + scrollInertia : 0, + autoHideScrollbar : false, + autoExpandScrollbar : false, + scrollButtons : + { + enable : false + } + }); + } + + $("#navigation .notification-icon.tooltip-right").tipsy(); + $(".nav-icon .notification-icon.tooltip-bottom").tipsy(); + + var expectedFloor = 1359; + var viewportCenter = 1480; + var actualCeil = Roblox.FixedUI.getWindowWidth(); + + var satisfiesLowerLimit = actualCeil >= expectedFloor; + var item = $(".header-2014 .search"); + var fakeInputElement = $(".header-2014 .search input"); + var mainHeader = $(".nav-container"); + + if (Roblox.FixedUI.isMobile) + { + $("#navigation").addClass("mobile"); + } + + if (!mainHeader.hasClass("no-gutter-ads") && actualCeil < viewportCenter) + { + satisfiesLowerLimit = false; + } + + if (satisfiesLowerLimit) + { + mainHeader.addClass("nav-open-static"); + } + + if ($("#navigation").length == 0) + { + $("#navContent").css( + { + "margin-left" : "0px", + width : "100%" + }); + + $(".nav-container .nav-icon").css("display", "none"); + $(".header-2014 .logo").css("margin", "3px 0 0 45px"); + $("#navContent").addClass("nav-no-left"); + } + + $(".nav-icon").on("click", function() + { + if (mainHeader.hasClass("nav-open-static")) + { + mainHeader.removeClass("nav-open-static"); + } + else + { + mainHeader.toggleClass("nav-open"); + } + }); + + $(".tickets-icon, .robux-icon, .tickets-amount, .robux-amount, .settings-icon").on("click mouseover mouseout", function(event) + { + event.stopPropagation(); + event.preventDefault(); + callback($(this).parent()); + }); + + $("#lsLoginStatus").on("click", function(event) + { + event.stopPropagation(); + event.preventDefault(); + var clicked_element = $("#lsLoginStatus"); + var form = clicked_element.closest("form"); + if (form.length === 0) + { + form = $("").appendTo("body"); + } + form.attr("action", clicked_element.attr("href")); + form.attr("method", "post"); + form.submit(); + }); + + $(".header-2014 .search-icon").on("click", function(event) + { + var c; + var divel; + var s; + event.stopPropagation(); + c = fakeInputElement.val(); + + if (c.length > 2 && item.hasClass("universal-search-open")) + { + divel = $(".header-2014 .search .universal-search-option.selected"); + s = divel.data("searchurl"); + window.location = s + encodeURIComponent(c); + } + else + { + callback(item); + fakeInputElement.focus(); + } + }); + + $(window).resize(function() + { + var reconnectTryTimes = Roblox.FixedUI.getWindowWidth(); + var interestingPoint = expectedFloor; + + if (!mainHeader.hasClass("no-gutter-ads")) + { + interestingPoint = viewportCenter; + } + + if (reconnectTryTimes >= interestingPoint && !(mainHeader.hasClass("nav-open") || mainHeader.hasClass("nav-open-static"))) + { + mainHeader.addClass("nav-open"); + } + + item.toggleClass("universal-search-open", false); + callback(); + }); + + $(".search input").on("keydown", function(event) + { + var expRecords = $(this).val(); + if ((event.which === 9 || event.which === 38 || event.which === 40) && expRecords.length > 0) + { + event.stopPropagation(); + event.preventDefault(); + scoringValidation(event); + } + }); + + $(".search input").on("keyup", function(event) + { + var param = $(this).val(); + var divel; + var url; + if (event.which === 13) + { + event.stopPropagation(); + event.preventDefault(); + divel = $(".header-2014 .search .universal-search-option.selected"); + url = divel.data("searchurl"); + if (param.length > 2) + { + window.location = url + encodeURIComponent(param); + } + } + else + { + if (param.length > 0) + { + item.toggleClass("universal-search-open", true); + $(".header-2014 .search .universal-search-dropdown .universal-search-string").text('"' + param + '"'); + } + else + { + item.toggleClass("universal-search-open", false); + } + } + }); + + $(".header-2014 .search .universal-search-option").on("click touchstart", function(event) + { + var hash; + var u; + event.stopPropagation(); + hash = fakeInputElement.val(); + if (hash.length > 2) + { + u = $(this).data("searchurl"); + window.location = u + encodeURIComponent(hash); + } + }); + + $(".header-2014 .search .universal-search-option").on("mouseover", function() + { + $(".header-2014 .search .universal-search-option").removeClass("selected"); + $(this).addClass("selected"); + }); + + $(".search input").on("focus", function() + { + var expRecords = fakeInputElement.val(); + if (expRecords.length > 0) + { + item.addClass("universal-search-open"); + } + }); + + $(".search input").on("click", function(event) + { + event.stopPropagation(); + }); + + $(".under-13").tipsy({ gravity : "n" }); + + $(".nav-content, .navigation, .header-2014").on("click", function() + { + callback(undefined); + item.toggleClass("universal-search-open", false); + }); + + $(".navigation, .notifications-container, .tickets-container, .robux-container").on("click", "a, a > span", function(event) + { + event.stopPropagation(); + }); +}); diff --git a/js/polygon/Navigation2014.js b/js/polygon/Navigation2014.js new file mode 100644 index 0000000..517fc4f --- /dev/null +++ b/js/polygon/Navigation2014.js @@ -0,0 +1,210 @@ +'use strict'; +$(function() +{ + function callback(obj) + { + var mainHeader = $(".nav-open"); + if (obj !== undefined) + { + mainHeader = mainHeader.not(obj); + } + + mainHeader = mainHeader.not(".nav-container"); + if (item.hasClass("nav-open")) + { + item.toggleClass("universal-search-open", false); + item.addClass("closing").delay(300).queue(function(metadataCallback) + { + $(this).removeClass("closing"); + metadataCallback(); + }); + } + + mainHeader.toggleClass("nav-open"); + if (obj !== undefined) + { + obj.toggleClass("nav-open"); + } + } + + function scoringValidation(event) + { + var codes = $(".header-2014 .search .universal-search-option"); + var i = -1; + + $.each(codes, function(maxAtomIndex, nextElement) + { + if ($(nextElement).hasClass("selected")) + { + $(nextElement).removeClass("selected"); + i = maxAtomIndex; + } + }); + + i = i + (event.which === 38 ? codes.length - 1 : 1); + i = i % codes.length; + + $(codes[i]).addClass("selected"); + } + + var expectedFloor = 1359; + var viewportCenter = 1480; + var actualCeil = $(window).width(); + + var satisfiesLowerLimit = actualCeil >= expectedFloor; + var item = $(".header-2014 .search"); + var fakeInputElement = $(".header-2014 .search input"); + var mainHeader = $(".nav-container"); + + if (!mainHeader.hasClass("no-gutter-ads") && actualCeil < viewportCenter) + { + satisfiesLowerLimit = false; + } + + if (satisfiesLowerLimit) + { + mainHeader.addClass("nav-open-static"); + } + + if ($("#navigation").length == 0) + { + $("#navContent").css( + { + "margin-left" : "0px", + width : "100%" + }); + + $(".nav-container .nav-icon").css("display", "none"); + $(".header-2014 .logo").css("margin", "3px 0 0 45px"); + $("#navContent").addClass("nav-no-left"); + } + + $(".nav-icon").on("click", function() + { + if (mainHeader.hasClass("nav-open-static")) + { + mainHeader.removeClass("nav-open-static"); + } + else + { + mainHeader.toggleClass("nav-open"); + } + }); + + $(".header-2014 .search-icon").on("click", function(event) + { + var c; + var divel; + var s; + event.stopPropagation(); + c = fakeInputElement.val(); + + if (c.length > 2 && item.hasClass("universal-search-open")) + { + divel = $(".header-2014 .search .universal-search-option.selected"); + s = divel.data("searchurl"); + window.location = s + encodeURIComponent(c); + } + else + { + callback(item); + fakeInputElement.focus(); + } + }); + + $(window).resize(function() + { + var reconnectTryTimes = $(window).width(); + var interestingPoint = expectedFloor; + + if (reconnectTryTimes >= interestingPoint && !(mainHeader.hasClass("nav-open") || mainHeader.hasClass("nav-open-static"))) + { + mainHeader.addClass("nav-open"); + } + + item.toggleClass("universal-search-open", false); + callback(); + }); + + $(".search input").on("keydown", function(event) + { + var expRecords = $(this).val(); + if ((event.which === 9 || event.which === 38 || event.which === 40) && expRecords.length > 0) + { + event.stopPropagation(); + event.preventDefault(); + scoringValidation(event); + } + }); + + $(".search input").on("keyup", function(event) + { + var param = $(this).val(); + var divel; + var url; + if (event.which === 13) + { + event.stopPropagation(); + event.preventDefault(); + divel = $(".header-2014 .search .universal-search-option.selected"); + url = divel.data("searchurl"); + if (param.length > 2) + { + window.location = url + encodeURIComponent(param); + } + } + else + { + if (param.length > 0) + { + item.toggleClass("universal-search-open", true); + $(".header-2014 .search .universal-search-dropdown .universal-search-string").text('"' + param + '"'); + } + else + { + item.toggleClass("universal-search-open", false); + } + } + }); + + $(".header-2014 .search .universal-search-option").on("click touchstart", function(event) + { + var hash; + var u; + event.stopPropagation(); + hash = fakeInputElement.val(); + if (hash.length > 2) + { + u = $(this).data("searchurl"); + window.location = u + encodeURIComponent(hash); + } + }); + + $(".header-2014 .search .universal-search-option").on("mouseover", function() + { + $(".header-2014 .search .universal-search-option").removeClass("selected"); + $(this).addClass("selected"); + }); + + $(".search input").on("focus", function() + { + var expRecords = fakeInputElement.val(); + if (expRecords.length > 0) + { + item.addClass("universal-search-open"); + } + }); + + $(".search input").on("click", function(event) + { + event.stopPropagation(); + }); + + $(".nav-content, .navigation, .header-2014").on("click", function() + { + callback(undefined); + item.toggleClass("universal-search-open", false); + }); + + $(".dropdown-hover a")[0].click(); +}); diff --git a/js/polygon/catalog.js b/js/polygon/catalog.js index f997764..d5b0081 100644 --- a/js/polygon/catalog.js +++ b/js/polygon/catalog.js @@ -48,6 +48,8 @@ $(".pagination .page").on("focusout keypress", this, function(event) polygon.catalog.PageNumber = $(this).val(); polygon.catalog.show(); }); +$(function(){ polygon.registerHandlers("catalog"); }); + /*$(".items .item").hover( function(){ $(this).find(".details").removeClass("d-none"); }, function(){ $(this).find(".details").addClass("d-none"); });*/ \ No newline at end of file diff --git a/js/polygon/character.js b/js/polygon/character.js new file mode 100644 index 0000000..81e680d --- /dev/null +++ b/js/polygon/character.js @@ -0,0 +1,108 @@ +polygon.character = +{ + type: 8, + wardrobe_page: 1, + wearing_page: 1, + + get_wardrobe: function(page, type) + { + if(page == undefined) page = polygon.character.wardrobe_page; + else polygon.character.wardrobe_page = page; + + if(type == null) type = polygon.character.type; + else polygon.character.type = type; + + // $(".wardrobe-container .items").empty(); + // $(".wardrobe-container .loading").removeClass("d-none"); + $(".wardrobe-container .no-items").addClass("d-none"); + //z$(".wardrobe-container .pagination").addClass("d-none"); + + $.post('/api/account/character/get-assets', {type: type, page: page, wearing: false}, function(data) + { + $(".wardrobe-container .items").empty(); + $(".wardrobe-container .loading").addClass("d-none"); + polygon.pagination.handle("wardrobe", page, data.pages); + if(data.items == undefined) return $(".wardrobe-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("wardrobe", data.items); + }); + }, + + get_wearing: function(page) + { + if(page == undefined) page = this.wearing_page; + else this.wearing_page = page; + + $.post('/api/account/character/get-assets', {page: page, wearing: true}, function(data) + { + $(".wearing-container .loading").addClass("d-none"); + $(".wearing-container .items").empty(); + $(".wearing-container .no-items").addClass("d-none"); + + polygon.pagination.handle("wearing", page, data.pages); + if(data.items == undefined) return $(".wearing-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("wearing", data.items); + }); + }, + + wait_for_render: function() + { + $.get("/thumbs/rawavatar", { UserID: polygon.user.id, x: 352, y: 352 }, function(data) + { + if (data == "PENDING") window.setTimeout(function() { polygon.character.wait_for_render(); }, 1500); + else window.setTimeout(function() { $('.avatar').attr('src', data); }, 1000); //this delay is put here because the avatar was often being displayed before the new one was written + }); + }, + + render_avatar: function() + { + $('.avatar').attr('src', 'https://i.stack.imgur.com/kOnzy.gif'); + $.post('/api/account/character/request-render', function(){ polygon.character.wait_for_render(); }); + }, + + toggle_wear: function() + { + var assetID = $(this).attr("data-asset-id"); + $.post('/api/account/character/toggle-wear', {assetID: assetID}, function(data) + { + if(data.success) { polygon.character.get_wardrobe(); polygon.character.get_wearing(); polygon.character.render_avatar(); } + else { polygon.buildModal({ header: "Error", body: data.message, buttons: [{'class':'btn btn-primary px-4', 'dismiss':true, 'text':'OK'}]}); } + }); + }, + + show_color_panel: function() + { + var body_part = $(this).attr("data-body-part"); + polygon.buildModal({ + header: "Choose a "+body_part+" Color", + body: $(".ColorPickerModalTemplate").clone().html(function(_, html){ return html.replace("$body_part", body_part); }).html(), + buttons: [] + }); + }, + + pick_color: function() + { + var body_part = $(this).closest(".ColorPickerContainer").attr("data-body-part"); + $('.modal').modal('hide'); + $(".ColorChooserRegion[data-body-part='"+body_part+"']").css("background-color", $(this).css("background-color")); + $.post("/api/account/character/paint-body", { BodyPart: body_part, Color: $(this).css("background-color")}, function(data) + { + if(data.success) polygon.character.render_avatar(); + else polygon.buildModal({ header: "Error", body: data.message, buttons: [{'class':'btn btn-primary px-4', 'dismiss':true, 'text':'OK'}]}); + }); + } +} + +$(".wardrobe-container .AttireCategorySelector").click(function(){ polygon.character.get_wardrobe(1, $(this).attr("data-asset-type")); }); +$("body").on('click',".toggle-wear", polygon.character.toggle_wear); + +$(".ColorChooserRegion").click(polygon.character.show_color_panel); +$("body").on('click', ".ColorPickerItem", polygon.character.pick_color); + +$(function() +{ + polygon.pagination.register("wardrobe", polygon.character.get_wardrobe); + polygon.pagination.register("wearing", polygon.character.get_wearing); + + polygon.character.get_wardrobe(); + polygon.character.get_wearing(); +}); \ No newline at end of file diff --git a/js/polygon/core.js b/js/polygon/core.js new file mode 100644 index 0000000..7891a57 --- /dev/null +++ b/js/polygon/core.js @@ -0,0 +1,272 @@ +$.ajaxSetup({ headers: { 'x-polygon-csrf': $('meta[name="polygon-csrf"]').attr('content') } }); + +/* todo - dont be lazy and work on this +polygon.ajax = function(url, method, data, trusted, successCallback, errorCallback) +{ + var ajaxOptions = {type: method, data: data}; + + if(trusted) + { + ajaxOptions.url = window.location.origin + url; + ajaxOptions.headers: {'x-polygon-csrf': $('meta[name="polygon-csrf"]').attr('content')}; + } + else { ajaxOptions.url = url; } + + +}*/ + +polygon.button = +{ + busy: function(button) + { + $(button).attr("disabled", "disabled").find(".spinner-border").removeClass("d-none"); + }, + + active: function(button) + { + $(button).removeAttr("disabled").find(".spinner-border").addClass("d-none"); + } +}; + +polygon.insertAlert = function(options) +{ + var alertCode = ''; + if (options.alertClasses == undefined) options.alertClasses = ''; + + if (options.parentClasses) alertCode += '
'; + alertCode += ''; + if (options.parentClasses) alertCode += '
'; + + $(options.parent).append(alertCode); +} + +polygon.buildModal = function(options) +{ + if (options.options == undefined) options.options = "show"; + if (options.fade == undefined) $(".global.modal").addClass("fade"); + else if (!options.fade) $(".global.modal").removeClass("fade"); + var footer = $(".global.modal .modal-footer .mx-auto"); + $(".global.modal .modal-title").html(options.header); + $(".global.modal .modal-body").html(options.body); + + footer.empty(); + $.each(options.buttons, function(_, button) + { + var buttonCode = ''; + footer.append(buttonCode); + }); + + if (options.footer) footer.append('

' + options.footer + '

'); + + $(".global.modal").modal(options.options); +}; + +polygon.populate = function(data, template, container, keepWrapper) +{ + if(keepWrapper == null) keepWrapper = true; + + $.each(data, function(_, item) + { + var templateCode = $(template).clone(); + templateCode.html(function(_, html) + { + for (let key in item) html = html.replace(new RegExp("\\$" + key, "g"), item[key]); + return html; + }); + + if (templateCode.find("img").attr("preload-src")) + templateCode.find("img").attr("src", templateCode.find("img").attr("preload-src")); + + if(!keepWrapper) templateCode = templateCode.contents().unwrap(); + + templateCode.appendTo(container); + }); +} + +polygon.populateRow = function(control, data) +{ + polygon.populate(data, "." + control + "-container .template .item", "." + control + "-container .items"); + polygon.registerHandlers(control); +} + +polygon.populateAccordion = function(control, data) +{ + polygon.populate(data, "." + control + "-container .accordion-template", "." + control + "-container .accordion", false); + polygon.registerHandlers(control); +} + +polygon.registerHandlers = function(control) +{ + if(control == undefined) + { + if($("[data-toggle='tooltip']").length) + $("[data-toggle='tooltip']").tooltip(); + + if($("input[data-toggle='toggle']").length) + $("input[data-toggle='toggle']").bootstrapToggle(); + } + else + { + if($("." + control + "-container [data-toggle='tooltip']").length) + $("." + control + "-container [data-toggle='tooltip']").tooltip(); + + if($("." + control + "-container input[data-toggle='toggle']").length) + $("." + control + "-container input[data-toggle='toggle']").bootstrapToggle(); + + if($("." + control + "-container .item .details").length) + $("." + control + "-container .item").hover(function(){ $(this).find(".details").removeClass("d-none"); }, function(){ $(this).find(".details").addClass("d-none"); }); + + $("." + control + "-container img").each(function() + { + if($(this).attr("preload-src") === undefined) return; + $(this).attr("src", $(this).attr("preload-src")); + $(this).removeAttr("preload-src"); + }); + + if($("." + control + "-container .accordion").length) + { + if($.ui == undefined) throw "Accordion widget detected for " + control + " applet but jQuery UI is not loaded"; + + if($("." + control + "-container .accordion").hasClass("ui-accordion")) + $("." + control + "-container .accordion").accordion("destroy"); + + $("." + control + "-container .accordion").accordion({ autoHeight: false, collapsible: true }); + } + } +} + +polygon.pagination = +{ + register: function(control, callback) + { + var pagination = "." + control + "-container .pagination"; + var page; + + if (!$(pagination).length) return; + + $(pagination + " .back").click(function() + { + callback(+$(pagination + " .page").val() - 1); + }); + $(pagination + " .next").click(function() + { + callback(+$(pagination + " .page").val() + 1); + }); + + $(pagination + " .page").on("focusout keypress", this, function(event) + { + page = $(this).val(); + + if (isNaN(page) || page < 1) page = 1; + + if (event.type == "keypress") + if (event.which == 13) $(this).blur(); else return; + + if (page == $(this).attr("data-last-page")) return; + $(this).attr("data-last-page", page); + callback(page); + }); + }, + + handle: function(control, page, pages) + { + var pagination = "." + control + "-container .pagination"; + + if (page > pages) page = pages; + if (isNaN(page) || page < 1) page = 1; + + if (!$(pagination).length) return; + if (pages <= 1 || pages == undefined) return $(pagination).addClass("d-none"); + + $(pagination).removeClass("d-none"); + $(pagination + " .pages").text(pages); + + if ($(pagination + " .page").prop("tagName") == "INPUT") $(pagination + " .page").val(page); + else $(pagination + " .page").text(page); + + if (page <= 1) $(pagination + " .back").attr("disabled", "disabled"); + else $(pagination + " .back").removeAttr("disabled"); + + if (page >= pages) $(pagination + " .next").attr("disabled", "disabled"); + else $(pagination + " .next").removeAttr("disabled"); + } +} + +polygon.appendination = +{ + register: function(object, threshold) + { + if(!$("."+object.control+"-container").length) return false; + + $("body").on("click", "."+object.control+"-container .show-more", function(){ object.load(true); }); + + $(window).scroll(function() + { + if(object.loading || object.reached_end) return; + if($(window).scrollTop() + $(window).height() < $(document).height() - threshold) return; + object.load(true); + }); + + $(function(){ object.load(false) }); + + return true; + }, + + handle: function(object, data) + { + if(object.page < data.pages) + { + $("."+object.control+"-container .show-more").removeClass("d-none"); + object.reached_end = false; + } + else + { + object.reached_end = true; + } + } +} + +toastr.options = +{ + "closeButton": false, + "debug": false, + "newestOnTop": false, + "progressBar": true, + "positionClass": "toast-top-right", + "preventDuplicates": false, + "onclick": null, + "showDuration": "300", + "hideDuration": "1000", + "timeOut": "10000", + "extendedTimeOut": "1000", + "showEasing": "swing", + "hideEasing": "linear", + "showMethod": "fadeIn", + "hideMethod": "fadeOut" +} + +$(function() +{ + polygon.registerHandlers(); + if (polygon.user.logged_in) + { + setInterval(function() + { + if (document.hidden) return; + $.post("/api/account/update-ping", function(data) + { + if (data.friendRequests) $(".friend-requests-indicator").text(data.friendRequests).removeClass("d-none"); + else $(".friend-requests-indicator").addClass("d-none"); + if (data.status == 401) window.location.reload(); + }); + }, 30000); + } +}); \ No newline at end of file diff --git a/js/polygon/games.js b/js/polygon/games.js index 3f1312a..f58f3bf 100644 --- a/js/polygon/games.js +++ b/js/polygon/games.js @@ -35,25 +35,50 @@ polygon.games = $(".placelauncher .modal-dialog a").text("Close"); }, - page: 1, - client: false, - load_servers: function(append, client) + join_server: function(serverID) { - if(append) polygon.games.page += 1; - else polygon.games.page = 1; + polygon.games.launch("Checking server status..."); + $.get('/api/games/serverlauncher', {serverID: serverID}, function(data) + { + if(data.success) + polygon.games.launch("Starting Project Polygon...", data.version, "launchmode:play+joinscripturl:"+data.joinScriptUrl); + else + polygon.games.error(data.message); + }); + }, - if(client) polygon.games.client = client; - else client = polygon.games.client; + delete_server: function(serverID) + { + $.post('/games/configure?ID='+serverID, {delete:true}, function(){ window.location = "/games"; }); + } +}; + +polygon.games.servers = +{ + page: 1, + reached_end: false, + loading: true, + control: "games", + client: false, + load: function(append, client) + { + if(append) polygon.games.servers.page += 1; + else polygon.games.page = 1; + + if(client) polygon.games.servers.client = client; + else client = polygon.games.servers.client; if(client == "All Versions") client = false; if(!client) { + $(".download-client").text("Select a version to download"); $(".download-client").addClass("disabled"); $(".download-client").removeAttr("href"); } else { + $(".download-client").text("Download "+client); $(".download-client").removeClass("disabled"); $(".download-client").attr("href", "https://setup"+client+".pizzaboxer.xyz/Polygon"+client+".exe"); } @@ -62,10 +87,13 @@ polygon.games = $(".games-container .no-items").addClass("d-none"); $(".games-container .show-more").addClass("d-none"); if(!append) $(".games-container .items").empty(); + + polygon.games.servers.loading = true; - $.post('/api/games/getServers', {client: client, page: polygon.games.page}, function(data) + $.post('/api/games/getServers', {client: client, page: polygon.games.servers.page}, function(data) { $(".games-container .loading").addClass("d-none"); + polygon.games.servers.loading = false; if(data.items == undefined) return $(".games-container .no-items").text(data.message).removeClass("d-none"); @@ -83,33 +111,17 @@ polygon.games = templateCode.appendTo(".games-container .items"); }); - if(data.pages > polygon.games.page) $(".games-container .show-more").removeClass("d-none"); + polygon.appendination.handle(polygon.games.servers, data); }); - }, - - join_server: function(serverID) - { - polygon.games.launch("Checking server status..."); - $.get('/api/games/serverlauncher', {serverID: serverID}, function(data) - { - if(data.success) - polygon.games.launch("Starting Project Polygon...", data.version, "launchmode:play+joinscripturl:"+data.joinScriptUrl); - else - polygon.games.error(data.message); - }); - }, - - delete_server: function(serverID) - { - $.post('/games/configure?ID='+serverID, {delete:true}, function(){ window.location = "/games"; }); } } if(window.location.pathname == "/games") { - $("select.version-selector").change(function(){ polygon.games.load_servers(false, $(this).val()); }); - $("body").on("click", ".games-container .show-more", function(){ polygon.games.load_servers(true); }); - $(function(){ polygon.games.load_servers(false); }); + $("select.version-selector").change(function(){ polygon.games.servers.load(false, $(this).val()); }); + $(function(){ polygon.appendination.register(polygon.games.servers, 1200); }); } + $("body").on("click", ".join-server", function(){ polygon.games.join_server($(this).attr("data-server-id")); }); -$(".delete-server").click(function(){ polygon.games.delete_server($(this).attr("data-server-id")); }); \ No newline at end of file +$(".delete-server").click(function(){ polygon.games.delete_server($(this).attr("data-server-id")); }); + diff --git a/js/polygon/groups.js b/js/polygon/groups.js new file mode 100644 index 0000000..04fd689 --- /dev/null +++ b/js/polygon/groups.js @@ -0,0 +1,715 @@ +polygon.groups = +{ + allies_page: 1, + display_allies: function(page) + { + if(!$(".allies-container").length) return false; + + if(page == undefined) page = this.allies_page; + else this.allies_page = page; + + $(".allies-container .items").empty(); + $(".allies-container .no-items").addClass("d-none"); + $(".allies-container .pagination").addClass("d-none"); + $(".allies-container .loading").removeClass("d-none"); + + $.post('/api/groups/get-related', { GroupID: $(".app").attr("data-group-id"), Type: "Allies", Page: page }, function(data) + { + $(".allies-container .loading").addClass("d-none"); + + polygon.pagination.handle("allies", page, data.pages); + if(!data.success) return polygon.insertAlert({text: "An error occurred while fetching group allies", parent: ".allies-container"}); + if(data.items == undefined) return $(".allies-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("allies", data.items); + + $(".allies-tab-item").removeClass("d-none"); + }); + + return true; + }, + + enemies_page: 1, + display_enemies: function(page) + { + if(!$(".enemies-container").length) return false; + + if(page == undefined) page = this.allies_page; + else this.allies_page = page; + + $(".enemies-container .items").empty(); + $(".enemies-container .no-items").addClass("d-none"); + $(".enemies-container .pagination").addClass("d-none"); + $(".enemies-container .loading").removeClass("d-none"); + + $.post('/api/groups/get-related', { GroupID: $(".app").attr("data-group-id"), Type: "Enemies", Page: page }, function(data) + { + $(".enemies-container .loading").addClass("d-none"); + + polygon.pagination.handle("enemies", page, data.pages); + if(!data.success) return polygon.insertAlert({text: "An error occurred while fetching group enemies", parent: ".enemies-container"}); + if(data.items == undefined) return $(".enemies-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("enemies", data.items); + + $(".enemies-tab-item").removeClass("d-none"); + }); + + return true; + }, + + members_rank: 1, + members_page: 1, + display_members: function(page, rank) + { + if(!$(".members-container").length) return false; + + if(page == undefined) page = this.members_page; + else this.members_page = page; + + if(rank == undefined) rank = $("select#ranks").val(); + this.members_rank = rank; + + $(".members-container .items").empty(); + $(".members-container .no-items").addClass("d-none"); + $(".members-container .pagination").addClass("d-none"); + $(".members-container .loading").removeClass("d-none"); + + $.post('/api/groups/get-members', {GroupID: $(".app").attr("data-group-id"), RankLevel: rank, Page: page}, function(data) + { + $(".members-container .loading").addClass("d-none"); + + polygon.pagination.handle("members", page, data.pages); + if(!data.success) return polygon.insertAlert({text: "An error occurred while fetching group members", parent: ".members-container"}); + + var select = $("select#ranks option[value=\"" + rank + "\"]"); + if(select.attr("data-loaded") == "false") + { + if(data.count == undefined) select.text(select.text() + " (0)"); + else select.text(select.text() + " (" + data.count + ")"); + + select.attr("data-loaded", "true") + } + + if(data.items == undefined) return $(".members-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("members", data.items); + }); + + return true; + }, + + wall_page: 1, + display_wall: function(page) + { + if(!$(".wall-container").length) return false; + + if(page == undefined) page = this.wall_page; + else this.wall_page = page; + + $(".wall-container .items").empty(); + $(".wall-container .no-items").addClass("d-none"); + $(".wall-container .pagination").addClass("d-none"); + $(".wall-container .loading").removeClass("d-none"); + + $.post('/api/groups/get-wall', {GroupID: $(".app").attr("data-group-id"), Page: page}, function(data) + { + $(".wall-container .loading").addClass("d-none"); + + polygon.pagination.handle("wall", page, data.pages); + if(!data.success) return polygon.insertAlert({text: "An error occurred while fetching group wall", parent: ".wall-container"}); + if(data.items == undefined) return $(".wall-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("wall", data.items); + }); + + return true; + }, + + post_wall: function() + { + $(".post-wall-error").text(""); + polygon.button.busy(".post-wall"); + + $.post('/api/groups/post-wall', {GroupID: $(".app").attr("data-group-id"), Content: $(".post-wall-input").val()}, function(data) + { + polygon.button.active(".post-wall"); + if(data.success) polygon.groups.display_wall(1); + else $(".post-wall-error").text(data.message); + }); + }, + + delete_wall_post: function(event) + { + event.preventDefault(); + + $.post('/api/groups/delete-wall-post', {GroupID: $(".app").attr("data-group-id"), PostID: $(event.target).attr("data-post-id")}, function(data) + { + if(data.success) polygon.groups.display_wall(); + else polygon.buildModal({ header: "Error", body: data.message, buttons: [{'class':'btn btn-primary px-4', 'dismiss':true, 'text':'OK'}]}); + }); + }, + + post_shout: function() + { + $(".post-shout-error").text(""); + polygon.button.busy(".post-shout"); + + $.post('/api/groups/post-shout', {GroupID: $(".app").attr("data-group-id"), Content: $(".post-shout-input").val()}, function(data) + { + polygon.button.active(".post-shout"); + if(data.success) window.location.reload(); + else $(".post-shout-error").text(data.message); + }); + }, + + join_group: function() + { + if(!polygon.user.logged_in) + return window.location = "/login?ReturnUrl="+encodeURI(window.location.pathname+window.location.search); + + $.post('/api/groups/join-group', {GroupID: $(".app").attr("data-group-id")}, function(data) + { + if(data.success) window.location.reload(); + else polygon.buildModal({ header: "Error", body: data.message, buttons: [{'class':'btn btn-primary px-4', 'dismiss':true, 'text':'OK'}]}); + }); + }, + + leave_group_prompt: function() + { + polygon.buildModal({ + header: "Leave Group", + body: 'Are you sure you want to leave this group?', + buttons: [{class:'btn btn-primary px-4 leave-group', text:'Yes'}, {class:'btn btn-secondary px-4', dismiss:true, text:'No'}] + }); + }, + + leave_group: function() + { + $.post('/api/groups/leave-group', {GroupID: $(".app").attr("data-group-id")}, function(data) + { + if(data.success) window.location.reload(); + else polygon.buildModal({ header: "Error", body: data.message, buttons: [{'class':'btn btn-primary px-4', 'dismiss':true, 'text':'OK'}]}); + }); + } +} + +polygon.groups.admin = +{ + roles: [], + role_permissions: + [ + { + "Title": "Posts", + "Permissions": + [ + {"Title": "View group wall", "Name": "CanViewGroupWall", "Value": false}, + {"Title": "View group status", "Name": "CanViewGroupStatus", "Value": false}, + {"Title": "Post on group wall", "Name": "CanPostOnGroupWall", "Value": false}, + {"Title": "Post group status", "Name": "CanPostGroupStatus", "Value": false}, + {"Title": "Delete group wall posts", "Name": "CanDeleteGroupWallPosts", "Value": false} + ] + }, + { + "Title": "Members", + "Permissions": + [ + {"Title": "Accept join requests", "Name": "CanAcceptJoinRequests", "Value": false}, + {"Title": "Kick lower-ranked members", "Name": "CanKickLowerRankedMembers", "Value": false}, + {"Title": "Manage lower-ranked member roles", "Name": "CanRoleLowerRankedMembers", "Value": false}, + {"Title": "Manage allies and enemies", "Name": "CanManageRelationships", "Value": false} + ] + }, + { + "Title": "Assets", + "Permissions": + [ + {"Title": "Create group items", "Name": "CanCreateAssets", "Value": false}, + {"Title": "Configure group items", "Name": "CanConfigureAssets", "Value": false}, + {"Title": "Spend group funds", "Name": "CanSpendFunds", "Value": false}, + {"Title": "Create and edit group games", "Name": "CanManageGames", "Value": false} + ] + }, + { + "Title": "Miscellaneous", + "Permissions": + [ + {"Title": "Manage group admin", "Name": "CanManageGroupAdmin", "Value": false}, + {"Title": "View audit log", "Name": "CanViewAuditLog", "Value": false} + ] + } + ], + roles_cap: 10, + get_roles: function() + { + $.post('/api/groups/admin/get-roles', {GroupID: $(".app").attr("data-group-id")}, function(data) + { + if(!data.success) return options.on_error(); + + $(".template select#MemberRanks").empty(); + $.each(data.items, function(index, item) + { + data.items[index].ID = Math.round(Math.random()*10000); // not the actual role id, just a unique identifier for when we create/remove roles + if(item.Rank == 0 || item.Rank == 255) return; + $(".template select#MemberRanks").append(""); + }); + + polygon.groups.admin.roles = data.items; + polygon.groups.admin.display_roles(); + polygon.groups.admin.display_members(); + }); + }, + + display_roles: function() + { + if(!$(".roles-container").length) return false; + + if(polygon.groups.admin.roles.length >= polygon.groups.admin.roles_cap) $(".roles-create").attr("disabled", "disabled"); + else $(".roles-create").removeAttr("disabled"); + + $(".roles-container tbody").empty("") + $(".roles-container .loading").addClass("d-none"); + + // owner rank must be first + if(polygon.groups.admin.roles[0].Rank != 255) + polygon.groups.admin.roles.reverse() + + + $.each(polygon.groups.admin.roles, function(index, item) + { + var row = ""; + + row += ""; + + if(item.Rank == 0) + { + row += ""; + row += ""; + } + else + { + row += ""; + row += ""; + } + + if(item.Rank == 0 || item.Rank == 255) + { + row += ""; + } + else + { + row += ""; + } + + row += ""; + if(item.Rank != 255) + { + row += ""; + } + if(item.Rank != 0 && item.Rank != 255 && polygon.groups.admin.roles.length > 3) + { + row += ""; + } + row += ""; + + row += ""; + + $(row).appendTo(".roles-container tbody"); + }); + + return true; + }, + + update_roles: function() + { + polygon.button.busy(".roles-save"); + + $(".roles-container tbody tr").each(function(_, item) + { + var ID = +$(item).attr("data-role-identifier"); + var Role = polygon.groups.admin.roles.find(Role => Role.ID == ID); + + Role.Name = $(item).find(".role-name").val(); + Role.Description = $(item).find(".role-description").val(); + Role.Rank = +$(item).find(".role-rank").val(); + }); + + $.post('/api/groups/admin/update-roles', {GroupID: $(".app").attr("data-group-id"), Roles: JSON.stringify(polygon.groups.admin.roles)}, function(data) + { + polygon.button.active(".roles-save"); + + if(!data.success) return toastr["error"](data.message); + + toastr["success"](data.message); + polygon.groups.admin.get_roles({reload: true}); + }); + }, + + add_role: function() + { + if(polygon.groups.admin.roles.length >= polygon.groups.admin.roles_cap) + return toastr["error"]("You can only have a maximum of "+polygon.groups.admin.roles_cap+" roles"); + + var GuestPermissions = polygon.groups.admin.roles.find(Role => Role.Rank == 0).Permissions; + + // basically just get the minimum available rank + var DefaultRank = 1; + var DefaultIndex = polygon.groups.admin.roles.length-1; + var DefaultRankCalculated = false; + + while (!DefaultRankCalculated) + { + if(polygon.groups.admin.roles.find(Role => Role.Rank == DefaultRank)) + { + DefaultRank++; + DefaultIndex--; + } + else + { + DefaultRankCalculated = true; + } + } + + polygon.groups.admin.roles.splice(DefaultIndex, 0, + { + ID: Math.round(Math.random()*10000), + Name: "New Role", + Description: "Describe your role!", + Rank: DefaultRank, + Permissions: GuestPermissions + }); + + polygon.groups.admin.display_roles(); + }, + + delete_role: function(RoleID) + { + var RoleIndex = polygon.groups.admin.roles.findIndex(Role => Role.ID == +RoleID); + if(RoleIndex == -1) return; + + polygon.groups.admin.roles.splice(RoleIndex, 1); + polygon.groups.admin.display_roles(); + }, + + delete_role_prompt: function(RoleID) + { + polygon.buildModal({ + header: "Delete Role", + body: 'Are you sure you want to delete this role?
Deleting this role will move all members assigned with this role to the lowest ranked role.', + buttons: + [ + { + class: 'btn btn-primary px-4 role-delete', + text: 'Yes', + dismiss: true, + attributes: [{attr: 'data-role-identifier', val: RoleID}] + }, + { + class: 'btn btn-secondary px-4', + text: 'No', + dismiss: true + } + ] + }); + }, + + configure_role_permissions: function(RoleID) + { + var Role = polygon.groups.admin.roles.find(Role => Role.ID == +RoleID); + if(!Role) return; + + var Body = ""; + Body += "
"; + Body += "
"; + + $.each(polygon.groups.admin.role_permissions, function(_, Category) + { + Body += ""; + Body += "
"; + + $.each(Category.Permissions, function(_, Permission) + { + Permission.Value = Role.Permissions[Permission.Name]; + + Body += "
"; + + Body += ""+ Permission.Title +""; + Body += "
"; + }); + + Body += "
"; + }); + + Body += "
"; + Body += "
"; + + polygon.buildModal({ + header: "Change Permissions For " + Role.Name, + body: Body, + buttons: + [ + { + class: 'btn btn-success role-save-permissions px-4', + text: 'Save', + dismiss: true, + attributes: [{attr: 'data-role-identifier', val: RoleID}] + }, + { + class: 'btn btn-secondary px-4', + text: 'Cancel', + dismiss: true + } + ] + }); + + // if these are called too early, they wont work correctly + setTimeout(function() + { + $(".modal-body .loading").addClass("d-none"); + $(".modal-body .role-permissions-container").removeClass("d-none"); + polygon.registerHandlers("role-permissions"); + }, 500); + }, + + change_role_permission: function(PermissionToChange, Value) + { + // having to do two array finds is kinda wasteful. maybe find a better way to do this? + polygon.groups.admin.role_permissions.find(Category => Category.Permissions.find(Permission => Permission.Name == PermissionToChange)) + .Permissions.find(Permission => Permission.Name == PermissionToChange) + .Value = Value; + }, + + save_role_permissions: function(RoleID) + { + var StagingPermissions = polygon.groups.admin.roles.find(Role => Role.ID == +RoleID).Permissions; + + $.each(polygon.groups.admin.role_permissions, function(_, Category) + { + $.each(Category.Permissions, function(_, Permission) + { + StagingPermissions[Permission.Name] = Permission.Value; + }); + }); + + polygon.groups.admin.roles.find(Role => Role.ID == +RoleID).Permissions = StagingPermissions; + }, + + members_page: 1, + display_members: function(page) + { + if(!$(".members-container").length) return false; + + if(page == undefined) page = this.members_page; + else this.members_page = page; + + $(".members-container .items").empty(); + $(".members-container .no-items").addClass("d-none"); + $(".members-container .pagination").addClass("d-none"); + $(".members-container .loading").removeClass("d-none"); + + $.post('/api/groups/admin/get-members', {GroupID: $(".app").attr("data-group-id"), Page: page}, function(data) + { + $(".members-container .loading").addClass("d-none"); + + polygon.pagination.handle("members", page, data.pages); + if(!data.success) return polygon.insertAlert({text:"An error occurred while fetching group members", parent:".members-container"}); + + if(data.items == undefined) return $(".members-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("members", data.items); + + $.each(data.items, function(_, item) + { + $("select#MemberRanks[data-user-id=\"" + item.UserID + "\"] option[value=\"" + item.RoleLevel + "\"]").prop("selected", "selected"); + }); + }); + + return true; + }, + + update_member: function(options = {}) + { + options.GroupID = $(".app").attr("data-group-id"); + + $.post('/api/groups/admin/update-member', options, function(data) + { + toastr[data.success ? "success" : "error"](data.message); + }); + }, + + update_member_rank: function(event) + { + var option = $(event.target); + polygon.groups.admin.update_member({UserID: option.attr("data-user-id"), RoleLevel: option.val()}); + }, + + pending_allies_page: 1, + display_pending_allies: function(page) + { + if(!$(".pending-allies-container").length) return false; + + if(page == undefined) page = this.pending_allies_page; + else this.pending_allies_page = page; + + $(".pending-allies-container .items").empty(); + $(".pending-allies-container .no-items").addClass("d-none"); + $(".pending-allies-container .pagination").addClass("d-none"); + $(".pending-allies-container .loading").removeClass("d-none"); + + $.post('/api/groups/get-related', { GroupID: $(".app").attr("data-group-id"), Type: "Pending Allies", Page: page }, function(data) + { + $(".pending-allies-container .loading").addClass("d-none"); + + polygon.pagination.handle("pending-allies", page, data.pages); + if(!data.success) return polygon.insertAlert({text: "An error occurred while fetching group allies", parent: ".pending.allies-container"}); + if(data.items == undefined) $(".pending-allies-container").addClass("d-none"); else $(".pending-allies-container").removeClass("d-none"); + polygon.populateRow("pending-allies", data.items); + }); + + return true; + }, + + request_relationship: function() + { + var Button = this; + var Type = $(Button).attr("data-type"); + + if(!$("input.request-" + Type).length) return; + + var GroupName = $("input.request-" + Type).val(); + + polygon.button.busy(Button); + + $.post('/api/groups/admin/request-relationship', { GroupID: $(".app").attr("data-group-id"), Recipient: GroupName, Type: Type }, function(data) + { + polygon.button.active(Button); + + toastr[data.success ? "success" : "error"](data.message); + if(data.success) + { + polygon.groups.display_allies(); + polygon.groups.display_enemies(); + polygon.groups.admin.display_pending_allies(); + } + }); + }, + + update_relationship: function() + { + var Button = this; + var GroupID = parseInt($(Button).parents(".card").attr("data-group-id")); + var Action = $(Button).attr("data-action"); + + polygon.button.busy(Button); + + $.post('/api/groups/admin/update-relationship', { GroupID: $(".app").attr("data-group-id"), Recipient: GroupID, Action: Action }, function(data) + { + polygon.button.active(Button); + + toastr[data.success ? "success" : "error"](data.message); + if(data.success) + { + polygon.groups.display_allies(); + polygon.groups.display_enemies(); + polygon.groups.admin.display_pending_allies(); + } + }); + } +}; + +polygon.groups.audit = +{ + page: 1, + reached_end: false, + loading: true, + control: "audit", + filter: "All Actions", + load: function(append, filter) + { + if(!$(".audit-container").length) return false; + + if(filter == undefined) filter = polygon.groups.audit.filter; + else polygon.groups.audit.filter = filter; + + if(append) polygon.groups.audit.page += 1; + else polygon.groups.audit.page = 1; + + $(".audit-container .loading").removeClass("d-none"); + $(".audit-container .no-items").addClass("d-none"); + $(".audit-container .show-more").addClass("d-none"); + if(!append) $("tbody").empty(); + + polygon.groups.audit.loading = true; + + $.post('/api/groups/get-audit', {GroupID: $(".app").attr("data-group-id"), Filter: polygon.groups.audit.filter, Page: polygon.groups.audit.page}, function(data) + { + $(".audit-container .loading").addClass("d-none"); + polygon.groups.audit.loading = false; + + if(data.items == undefined) return $(".audit-container .no-items").text(data.message).removeClass("d-none"); + + $.each(data.items, function(_, Item) + { + $("\ + \ + "+Item.Date+"\ + "+Item.UserName+"\ + "+Item.Rank+"\ + "+Item.Description+"\ + \ + ").appendTo(".audit-container tbody"); + }); + + polygon.appendination.handle(polygon.groups.audit, data); + }); + + return true; + } +}; + +$(function() +{ + if(window.location.pathname == "/my/groupadmin") + { + polygon.groups.admin.get_roles(); + } + else + { + if(polygon.groups.display_members()) polygon.pagination.register("members", polygon.groups.display_members); + } + + if(polygon.groups.display_wall()) polygon.pagination.register("wall", polygon.groups.display_wall); + if(polygon.groups.display_allies()) polygon.pagination.register("allies", polygon.groups.display_allies); + if(polygon.groups.display_enemies()) polygon.pagination.register("enemies", polygon.groups.display_enemies); + + if(polygon.groups.admin.display_pending_allies()) polygon.pagination.register("pending-allies", polygon.groups.admin.display_pending_allies); + + polygon.appendination.register(polygon.groups.audit, 300); +}); + +$(".post-shout").click(polygon.groups.post_shout); +$(".post-wall").click(polygon.groups.post_wall); +$("body").on("click", ".delete-wall-post", polygon.groups.delete_wall_post); + +$(".join-group").click(polygon.groups.join_group); +$(".leave-group-prompt").click(polygon.groups.leave_group_prompt); +$("body").on("click", ".leave-group", polygon.groups.leave_group); + +$("select#ranks").change(function(){ polygon.groups.display_members(1, $(this).val()); }); + + +$("body").on("change", "select#MemberRanks", polygon.groups.admin.update_member_rank); + +$(".roles-create").click(polygon.groups.admin.add_role); +$(".roles-save").click(polygon.groups.admin.update_roles); +$("body").on("click", ".role-delete-prompt", function(){ polygon.groups.admin.delete_role_prompt($(this).parents("tr").attr("data-role-identifier")); }); +$("body").on("click", ".role-delete", function(){ polygon.groups.admin.delete_role($(this).attr("data-role-identifier")); }); + +$("body").on("click", ".role-edit-permissions", function(){ polygon.groups.admin.configure_role_permissions($(this).parents("tr").attr("data-role-identifier")); }); +$("body").on("change", ".role-change-permission", function(){ polygon.groups.admin.change_role_permission($(this).attr("data-permission"), $(this).is(':checked')); }); +$("body").on("click", ".role-save-permissions", function(){ polygon.groups.admin.save_role_permissions($(this).attr("data-role-identifier")); }); + +$("body").on("click", ".request-relationship", polygon.groups.admin.request_relationship); +$("body").on("click", ".update-relationship", polygon.groups.admin.update_relationship); + + +$(".audit-container .audit-filter-action").change(function(){ polygon.groups.audit.load(null, $(this).val()); }); \ No newline at end of file diff --git a/js/polygon/home.js b/js/polygon/home.js new file mode 100644 index 0000000..e9c4c3b --- /dev/null +++ b/js/polygon/home.js @@ -0,0 +1,54 @@ +polygon.home = +{ + getFeed: function() + { + $.ajax({url: "/api/account/get-feed", type: "POST", success: function(data) + { + $(".feed-container .items").empty(); + $(".newsfeed-container .items").empty(); + + $(".feed-container .loading").addClass("d-none"); + if(!data.success) return polygon.insertAlert({text:"An error occurred while fetching your feed", parent:".my-feed", parentClasses:"divider-top py-2"}); + polygon.populateRow("feed", data.feed); + + $(".newsfeed-container .loading").addClass("d-none"); + if(!data.news.length) return $(".polygon-news").hide(250); + polygon.populateRow("newsfeed", data.news); + $(".polygon-news").show(250); + }}); + }, + + getRecentlyPlayed: function() + { + $.post('/api/account/get-recentlyplayed', function(data) + { + $(".recently-played-container .items").empty(); + $(".recently-played-container .loading").addClass("d-none"); + $(".recently-played-container .no-items").addClass("d-none"); + + if(!data.success) return polygon.insertAlert({text:"An error occurred while fetching your recently played games", parent:".recently-played-container", parentClasses:"p-2"}); + if(data.items == undefined || !data.items.length) return $(".recently-played-container .no-items").removeClass("d-none"); + polygon.populateRow("recently-played", data.items); + }); + }, + + loadHomepage: function() + { + polygon.home.getFeed(); + polygon.home.getRecentlyPlayed(); + } +}; + +$('.btn-update-status').click(function() +{ + $(this).attr("disabled", "disabled").find("span").show(); + $.post('/api/account/update-status', {"status":$("#status").val()}, function(data) + { + $('.btn-update-status').removeAttr("disabled").find("span").hide(); + if(data.success) polygon.home.getFeed(); + else toastr["error"](data.message); + }); +}); + +$(polygon.home.loadHomepage); +setInterval(function(){ if(document.hidden) return; polygon.home.loadHomepage(); polygon.friends.displayFriends(); }, 60000); \ No newline at end of file diff --git a/js/polygon/inventory.js b/js/polygon/inventory.js index 1b545ba..3a6d61c 100644 --- a/js/polygon/inventory.js +++ b/js/polygon/inventory.js @@ -1,7 +1,7 @@ polygon.inventory = { type: 8, - display: function(type, page) + display: function(page, type) { if(type == null) type = polygon.inventory.type; else polygon.inventory.type = type; @@ -13,22 +13,20 @@ polygon.inventory = $(".inventory-container .pagination").addClass("d-none"); $(".inventory-container .loading").removeClass("d-none"); - $.post('/api/users/getInventory', {userId: $(".app").attr("data-user-id"), type: type, page: page}, function(data) + $.post('/api/users/get-inventory', { userId: $(".app").attr("data-user-id"), type: type, page: page }, function(data) { $(".inventory-container .loading").addClass("d-none"); - //$(".inventory-container .items").empty(); - //$(".inventory-container .no-items").addClass("d-none"); polygon.pagination.handle("inventory", page, data.pages); - if(data.assets == undefined) return $(".inventory-container .no-items").text(data.message).removeClass("d-none"); - polygon.populate(data.assets, ".inventory-template .item", ".inventory-container .items"); + if(data.items == undefined) return $(".inventory-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("inventory", data.items); }); } } -$(".inventory-container .selector").click(function(){ polygon.inventory.display($(this).attr("data-asset-type")); }); +$(".inventory-container .selector").click(function(){ polygon.inventory.display(null, $(this).attr("data-asset-type")); }); $(function() { - polygon.pagination.register("inventory", function(page){ polygon.inventory.display(null, page); }); + polygon.pagination.register("inventory", polygon.inventory.display); polygon.inventory.display(); }); \ No newline at end of file diff --git a/js/polygon/money.js b/js/polygon/money.js new file mode 100644 index 0000000..0fc5152 --- /dev/null +++ b/js/polygon/money.js @@ -0,0 +1,49 @@ +polygon.money = {}; + +polygon.money.transactions = +{ + page: 1, + reached_end: false, + loading: true, + control: "transactions", + type: "Purchases", + load: function(append, type) + { + if(type == undefined) type = polygon.money.transactions.type; + else polygon.money.transactions.type = type; + + if(append) polygon.money.transactions.page += 1; + else polygon.money.transactions.page = 1; + + $(".transactions-container .loading").removeClass("d-none"); + $(".transactions-container .show-more").addClass("d-none"); + if(!append) $("tbody").empty(); + + polygon.money.transactions.loading = true; + + $.post('/api/account/get-transactions', {type: type, page: polygon.money.transactions.page}, function(data) + { + $(".transactions-container .loading").addClass("d-none"); + polygon.money.transactions.loading = false; + + if(data.transactions == undefined) return $(".transactions-container .no-items").text(data.message).removeClass("d-none"); + + $.each(data.transactions, function(_, transaction) + { + $('\ + '+transaction.date+'\ + '+transaction.member_name+'\ + '+transaction.type+' '+transaction.asset_name+'\ + '+transaction.amount+'\ + ').appendTo(".transactions-container tbody"); + }); + + polygon.appendination.handle(polygon.money.transactions, data); + }); + } +}; + + +$(".transactions-container #transactionType").change(function(){ polygon.money.transactions.load(false, $(this).val()); }); + +$(function(){ polygon.appendination.register(polygon.money.transactions, 300); }); \ No newline at end of file diff --git a/js/polygon/profile.js b/js/polygon/profile.js new file mode 100644 index 0000000..d7c161d --- /dev/null +++ b/js/polygon/profile.js @@ -0,0 +1,88 @@ +polygon.profile = {}; + +polygon.profile.games = +{ + page: 1, + display: function(page) + { + if(page == undefined) page = this.page; + else this.page = page; + + $(".games-container .accordion").empty(); + $(".games-container .no-items").addClass("d-none"); + $(".games-container .pagination").addClass("d-none"); + $(".games-container .loading").removeClass("d-none"); + + $.post("/api/games/getServers", {creator: $(".app").attr("data-user-id"), page: page}, function(data) + { + $(".games-container .loading").addClass("d-none"); + + polygon.pagination.handle("games", page, data.pages); + if(data.items == undefined) return $(".games-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateAccordion("games", data.items); + }); + } +}; + +polygon.profile.badges = +{ + type: "polygon", + display: function(page, type) + { + if(type == null) type = polygon.profile.badges.type; + else polygon.profile.badges.type = type; + + if(page == undefined) page = 1; + + $(".badges-container .items").empty(); + $(".badges-container .no-items").addClass("d-none"); + $(".badges-container .pagination").addClass("d-none"); + $(".badges-container .loading").removeClass("d-none"); + + $.post('/api/users/get-badges', {userID: $(".app").attr("data-user-id"), type: type, page: page}, function(data) + { + $(".badges-container .loading").addClass("d-none"); + + polygon.pagination.handle("badges", page, data.pages); + if(data.items == undefined) return $(".badges-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("badges", data.items); + }); + } +}; + +polygon.profile.groups = +{ + page: 1, + display: function(page) + { + if(page == undefined) page = this.page; + else this.page = page; + + $(".groups-container .items").empty(); + $(".groups-container .no-items").addClass("d-none"); + $(".groups-container .pagination").addClass("d-none"); + $(".groups-container .loading").removeClass("d-none"); + + $.post('/api/users/get-groups', {userID: $(".app").attr("data-user-id"), page: page}, function(data) + { + $(".groups-container .loading").addClass("d-none"); + + polygon.pagination.handle("groups", page, data.pages); + if(data.items == undefined) return $(".groups-container .no-items").text(data.message).removeClass("d-none"); + polygon.populateRow("groups", data.items); + }); + } +}; + +$(".badges-container .selector").click(function(){ polygon.profile.badges.display(null, $(this).attr("data-badge-type")); }); + +$(function() +{ + polygon.profile.games.display(); + polygon.profile.badges.display(); + polygon.profile.groups.display(); + + polygon.pagination.register("games", polygon.profile.games.display); + polygon.pagination.register("badges", polygon.profile.badges.display); + polygon.pagination.register("groups", polygon.profile.groups.display); +}); \ No newline at end of file diff --git a/keys/template.png b/keys/template.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8742eeb0901ae6fc876593aabe98e8642b7644 GIT binary patch literal 24671 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 literal 0 HcmV?d00001 diff --git a/login.php b/login.php index 789c420..d65dfc7 100644 --- a/login.php +++ b/login.php @@ -1,6 +1,6 @@ false, "password" => false]; $username = $password = false; @@ -11,21 +11,23 @@ $returnurl = str_starts_with($returnurl_raw, "https://".$_SERVER['HTTP_HOST']) ? if($_SERVER['REQUEST_METHOD'] == 'POST') { + Polygon::ImportClass("Auth"); + $username = $_POST['username'] ?? false; $password = $_POST['password'] ?? false; $pwresult = false; - $userInfo = users::getUserInfoFromUserName($username); - $auth = new auth($password); + $userInfo = Users::GetInfoFromName($username); + $auth = new Auth($password); if(!$password) $errors["password"] = "Please enter your password"; if(!$username) $errors["username"] = "Please enter your username"; elseif(!$userInfo) $errors["username"] = "That user doesn't exist"; - elseif(!$auth->verifyPassword($userInfo->password)) $errors["password"] = "Incorrect password"; + elseif(!$auth->VerifyPassword($userInfo->password)) $errors["password"] = "Incorrect password"; if(!$errors["username"] && !$errors["password"]) { // upgrade password to argon2id w/ encryption if still using bcrypt - if(strpos($userInfo->password, "$2y$10") !== false) $auth->updatePassword($userInfo->id); + if(strpos($userInfo->password, "$2y$10") !== false) $auth->UpdatePassword($userInfo->id); session::createSession($userInfo->id); if($userInfo->twofa) { @@ -51,7 +53,7 @@ pageBuilder::buildHeader();
- " name="username" id="username" value="" autocomplete="username"> + " name="username" id="username" value="" autocomplete="username">

>

@@ -92,7 +94,7 @@ pageBuilder::buildHeader();

- more text goes here

diff --git a/messages/inbox.php b/messages/inbox.php index e4ff65d..791b60c 100644 --- a/messages/inbox.php +++ b/messages/inbox.php @@ -1,7 +1,7 @@ diff --git a/moderation.php b/moderation.php index b8eac9f..145933d 100644 --- a/moderation.php +++ b/moderation.php @@ -3,12 +3,12 @@ $bypassModeration = true; require $_SERVER['DOCUMENT_ROOT'].'/api/private/core.php'; if(!SESSION){ pageBuilder::errorCode(404); } -if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["reactivate"]) && users::undoUserModeration(SESSION["userId"])) +if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["reactivate"]) && Users::UndoUserModeration(SESSION["userId"])) { redirect("/"); } -$moderationInfo = users::getUserModeration(SESSION["userId"]); +$moderationInfo = Users::GetUserModeration(SESSION["userId"]); if(!$moderationInfo) pageBuilder::errorCode(404); $text = @@ -38,7 +38,7 @@ $text = pageBuilder::$pageConfig["title"] = SITE_CONFIG["site"]["name"]." Moderation"; pageBuilder::buildHeader(); ?> -
+
Moderation
@@ -47,10 +47,8 @@ pageBuilder::buildHeader();

banType]?>

Done at: timeStarted)?>

Moderator note:

-
-
- ', '

', $markdown->text($moderationInfo->reason, true))?> -

+
+ ', '

', $markdown->text($moderationInfo->reason, true))?>


banType]?>

diff --git a/my/account.php b/my/account.php index 82619fd..325b60c 100644 --- a/my/account.php +++ b/my/account.php @@ -1,47 +1,83 @@ NULL, + "key" => $userinfo->discordKey, + "timeVerified" => $userinfo->discordVerifiedTime +]; -$sessions = $pdo->prepare("SELECT * FROM sessions WHERE userId = :uid AND valid AND created+157700000 > UNIX_TIMESTAMP() AND lastonline+432000 > UNIX_TIMESTAMP() ORDER BY created DESC"); -$sessions->bindParam(":uid", $userinfo->id, PDO::PARAM_INT); -$sessions->execute(); +if ($discordinfo->key == NULL) +{ + $discordinfo->key = generateUUID(); + db::run( + "UPDATE users SET discordKey = :key WHERE id = :id", + [":key" => $discordinfo->key, ":id" => $userinfo->id] + ); +} +else if ($userInfo->discordID != NULL) +{ + $discordinfo->info = Discord::GetUserInfo($userinfo->discordID); +} +$gauth = TwoFactorAuth::Initialize(); $twofa = SESSION["2fa"]; $twofaSecret = $userinfo->twofaSecret; +$sessions = db::run( + "SELECT * FROM sessions WHERE userId = :uid AND valid AND created+157700000 > UNIX_TIMESTAMP() AND lastonline+432000 > UNIX_TIMESTAMP() ORDER BY created DESC", + [":uid" => $userinfo->id] +); + +$Fields = (object) +[ + "Code" => "", + "Password" => "" +]; + +$Errors = (object) +[ + "Code" => false, + "Password" => false +]; + +$RequestSent = false; + //2fa stuff is not done via ajax cuz am lazy -if(isset($_POST["2fa"])) +if($_SERVER["REQUEST_METHOD"] == "POST") { + Polygon::ImportClass("Auth"); + + $RequestSent = true; + $panel = "2FA"; + $csrf = $_POST['polygon_csrf'] ?? false; - $code = $_POST['code'] ?? false; - $password = $_POST['password'] ?? false; - $auth = new auth($password); + $Fields->Code = $_POST['code'] ?? "false"; + $Fields->Password = $_POST['password'] ?? "false"; - if($csrf != SESSION["csrfToken"]) - { - pageBuilder::showStaticNotification("error", "Invalid CSRF token"); goto pb; - } + $auth = new Auth($Fields->Password); - if(!$gauth->checkCode($twofaSecret, $code, 1)) + if($csrf != SESSION["csrfToken"]) $Errors->Password = "An unexpected error occurred"; + if(!$gauth->checkCode($twofaSecret, $Fields->Code, 1)) $Errors->Code = "Incorrect code"; + if(!$auth->VerifyPassword($userInfo->password)) $Errors->Password = "Incorrect password"; + + if(!$Errors->Code && !$Errors->Password) { - pageBuilder::showStaticNotification("error", "Incorrect code"); goto pb; - } - if(!$auth->verifyPassword($userInfo->password)) - { - pageBuilder::showStaticNotification("error", "Incorrect password"); goto pb; - } + TwoFactorAuth::Toggle(); + $twofa = !SESSION["2fa"]; - twofa::toggle(); - $twofa = !SESSION["2fa"]; - - if($twofa) - { - $recoveryCodes = twofa::generateRecoveryCodes(); - ob_start(); + if($twofa) + { + $recoveryCodes = TwoFactorAuth::GenerateRecoveryCodes(); + ob_start(); ?> Congratulations! Your account is now more secure. But before you go, there's one last thing: @@ -61,20 +97,22 @@ These are a set of static, one-time use codes that never expire unless they are This is the only time you'll ever see these here, so write them down somewhere now. "Two-Factor Authentication is active", - "body" => ob_get_clean(), - "buttons" => [["class" => "btn btn-primary", "dismiss" => true, "text" => "I understand"]] - ]); + pageBuilder::showStaticModal([ + "header" => "Two-Factor Authentication is active", + "body" => ob_get_clean(), + "buttons" => [["class" => "btn btn-primary", "dismiss" => true, "text" => "I understand"]], + "options" => ["show" => true, "backdrop" => "static"] + ]); + } + else + { + $twofaSecret = TwoFactorAuth::GenerateNewSecret($gauth); + } } } -elseif(!$userinfo->twofa) +else if(!$userinfo->twofa) { - $twofaSecret = $gauth->generateSecret(); - $query = $pdo->prepare("UPDATE users SET twofaSecret = :secret WHERE id = :uid"); - $query->bindParam(":uid", $userinfo->id, PDO::PARAM_INT); - $query->bindParam(":secret", $twofaSecret, PDO::PARAM_STR); - $query->execute(); + $twofaSecret = TwoFactorAuth::GenerateNewSecret($gauth); } pb: @@ -83,103 +121,106 @@ pageBuilder::buildHeader(); ?>

My Account

-
-
-
-

Settings

-
- -
- -

1000 characters max

-
-
-
- -
- -

Dark theme is very experimental, send me your suggestions!

-
-
-
-
Filter
-
-
- filter?' checked':''?> value="true"> -

replaces words with baba booey

+
+
+
+

General

+ +
+
+
+ +
+ +

1000 characters max

+
-
-
- = 1) { ?> -
-
Debugging
-
-
- debugging?' checked':''?> value="true"> -

allows ingame debugging

+
+ +
+ +

Dark theme is very experimental, send me your suggestions!

+
+
+
Filter
+
+
+ filter?' checked':''?> value="true"> +

replaces words with baba booey

+
+
+
+ +
+
Debugging
+
+
+ debugging?' checked':''?> value="true"> +

allows ingame debugging

+
+
+
+ + + + +
+
+ info == NULL) { ?> +

Looks like you're not yet verified. If you haven't joined the server yet, you can find the Discord link up in the navbar.

+

Once you join, the verification bot should DM you asking for your key, which is here:

+ PolygonVerify:key?> +

Just send this to the bot, and you'll be verified!

+

If the bot hasn't DMed you, it may be down. When it comes back online, just send a DM to the bot with your key.

+ +
+
+
+
+ +
+
+

info->username?>#info->tag?>

+
Verified timeVerified)?>
+
+
+
+
+

If you wish to have your Discord account unverified so you can use another account, message an admin.

+
- - - -
-

Security

-
diff --git a/register.php b/register.php deleted file mode 100644 index f29c94c..0000000 --- a/register.php +++ /dev/null @@ -1,154 +0,0 @@ - false, "password" => false, "confirmpassword" => false, "regpass" => false]; -$keys = ["hsgjhsogiuosyru" => 1, "e6a76346d3ece5e9891c4876b85174bf" => 4, "78af60b3e80630cc8b2f4372ab1e8c8d" => 5, "c8f51135774e7f4e4027921fe947f67f" => 4, "e6a76346b3ece5e9891c4876b85174bc" => 3]; -$username = $password = $confirmpassword = $regpass = false; -if($_SERVER['REQUEST_METHOD'] == 'POST') -{ - $username = $_POST['username'] ?? false; - $password = $_POST['password'] ?? false; - $confirmpassword = $_POST['confirmpassword'] ?? false; - $regpass = $_POST['regpass'] ?? false; - - if(!$username) $errors["username"] = "Please enter a username"; - elseif(strlen($username) < 3 || strlen($username) > 20) $errors["username"] = "Your username can only be 3 - 20 characters long"; - elseif(preg_match('/[^A-Za-z0-9]/', $username)) $errors["username"] = "Your username can only contain alphanumeric characters"; - else - { - $query = $pdo->prepare("SELECT COUNT(*) FROM blacklistednames WHERE (exact AND username = :name) OR (NOT exact AND username LIKE CONCAT('%', :name, '%'))"); - $query->bindParam(":name", $username, PDO::PARAM_STR); - $query->execute(); - if($query->fetchColumn()){ $errors["username"] = "That username is unavailable. Sorry!"; goto end; } - - $query = $pdo->prepare("SELECT COUNT(*) FROM users WHERE username = :name"); - $query->bindParam(":name", $username, PDO::PARAM_STR); - $query->execute(); - if($query->fetchColumn()){ $errors["username"] = "Someone already has that username! Try choosing a different one."; goto end; } - } - - if(!$password) $errors["password"] = "Please enter a password"; - elseif(strlen(preg_replace('/[0-9]/', "", $password)) < 6) $errors["password"] = "Your password is too weak. Make sure it contains at least six non-numeric characters"; - elseif(strlen(preg_replace('/[^0-9]/', "", $password)) < 2) $errors["password"] = "Your password is too weak. Make sure it contains at least two numbers"; - - if(!$confirmpassword) $errors["confirmpassword"] = "Please confirm your password"; - elseif($password != $confirmpassword) $errors["confirmpassword"] = "Confirmation password does not match"; - - if(!isset($keys[$regpass])) $errors["regpass"] = "Invalid registration code"; - else - { - $query = $pdo->prepare("SELECT COUNT(*) FROM users WHERE keyUsed = :key"); - $query->bindParam(":key", $regpass, PDO::PARAM_STR); - $query->execute(); - if($query->fetchColumn() >= $keys[$regpass]) $errors["regpass"] = "Invalid registration code"; - } - - if(!$errors["username"] && !$errors["password"] && !$errors["confirmpassword"] && !$errors["regpass"]) - { - $auth = new auth($password); - $pwhash = $auth->createPassword(); - $ip = $_SERVER["REMOTE_ADDR"]; - $query = $pdo->prepare("INSERT INTO users (username, password, keyUsed, email, jointime, lastonline, regip, nextCurrencyStipend, status) VALUES (:name, :hash, :key, 'placeholder', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), :ip, UNIX_TIMESTAMP()+86400, 'I\'m new to Polygon!')"); - $query->bindParam(":name", $username, PDO::PARAM_STR); - $query->bindParam(":hash", $pwhash, PDO::PARAM_STR); - $query->bindParam(":key", $regpass, PDO::PARAM_STR); - $query->bindParam(":ip", $ip, PDO::PARAM_STR); - - if($query->execute()) - { - $userid = $pdo->lastInsertId(); - - $query = $pdo->prepare("INSERT INTO ownedAssets (assetId, userId, wearing, timestamp) VALUES (162, :uid, 1, unix_timestamp())"); - $query->bindParam(":uid", $userid, PDO::PARAM_INT); - $query->execute(); - - $query = $pdo->prepare("INSERT INTO ownedAssets (assetId, userId, wearing, timestamp) VALUES (310, :uid, 1, unix_timestamp())"); - $query->bindParam(":uid", $userid, PDO::PARAM_INT); - $query->execute(); - - session::createSession($userid); - polygon::requestRender("Avatar", $userid); - die(header("Location: /")); - } - else{ die("An unexpected error occured! We're sorry."); } - } -} - -end: -pageBuilder::$pageConfig["title"] = "Sign Up"; -pageBuilder::buildHeader(); -?> - -

Sign up

-
-
-
-
-
-
- -
- " name="username" id="username" value="" autocomplete="username"> - > - 3 - 20 alphanumeric characters, no spaces or underscores. Check our terms of service to make sure it's suitable. -
-
-
- -
- " name="password" id="password" value="" autocomplete="new-password"> - > - minimum 8 characters, must have at least 6 characters and 2 numbers -
-
-
- -
- " name="confirmpassword" id="confirmpassword" value=""> - > -
-
-
- -
- " name="regpass" id="regpass" value=""> - > -
-
- -
-
-
-
- Already registered? Login -
-
-
- By signing up to and using , you agree to our terms of service and privacy policy. -
-
-
-
-
- - diff --git a/thumbs/Script.png b/thumbs/Script.png index b87fddcb415896c7a8a3422dd3bb79016db31b05..77e00f1e2c90c6111412817482198c514a127e89 100644 GIT binary patch literal 49482 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 YC&JUK*Sq0vr~?8(K}J;?>bn#6e=EU{fdBvi delta 11037 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 diff --git a/thumbs/asset.php b/thumbs/asset.php index bf58b24..67ee0ad 100644 --- a/thumbs/asset.php +++ b/thumbs/asset.php @@ -1,5 +1,6 @@ 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

`re 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 literal 22731 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 ?? false); - if(!$info || $moderation && (!SESSION || !SESSION["adminLevel"])) pageBuilder::errorCode(404); + $info = Users::GetInfoFromID($_GET['ID'] ?? $_GET['id'] ?? false); + $moderation = Users::GetUserModeration($info->id ?? false); + if(!$info || $moderation && !$isModerator) pageBuilder::errorCode(404); $selfProfile = false; $pronouns = ["your" => $info->username."'s", "do_not" => $info->username." doesn't", "have_not" => $info->username." hasn't"]; } else { - users::requireLogin(); - $info = users::getUserInfoFromUid(SESSION["userId"]); + Users::RequireLogin(); + $info = Users::GetInfoFromID(SESSION["userId"]); $moderation = false; $selfProfile = true; $pronouns = ["your" => "Your", "do_not" => "You don't", "have_not" => "You haven't"]; } -if(SESSION) $friendship = users::checkIfFriends(SESSION["userId"], $info->id); +$statistics = (object) +[ + "friends" => Users::GetFriendCount($info->id), + "posts" => Users::GetForumPostCount($info->id), + "joined" => date("F j Y", $info->jointime) +]; -if(SESSION && SESSION["adminLevel"]) +if(SESSION) $friendship = Users::CheckIfFriends(SESSION["userId"], $info->id); + +if(SESSION) { - $alts = []; - function recurseAlts($ip) - { - global $pdo; - global $alts; - $query = $pdo->prepare("SELECT users.username, userId, users.jointime, loginIp FROM sessions INNER JOIN users ON users.id = userId WHERE loginIp = :ip GROUP BY userId"); - $query->bindParam(":ip", $ip, PDO::PARAM_STR); - $query->execute(); - while($row = $query->fetch(PDO::FETCH_OBJ)) - $alts[] = ["username" => $row->username, "userid" => $row->userId, "created" => $row->jointime, "ip" => $row->loginIp]; - } - recurseAlts($info->regip); + pageBuilder::$JSdependencies[] = "http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"; + pageBuilder::$JSdependencies[] = "/js/protocolcheck.js?t=".time(); + pageBuilder::$polygonScripts[] = "/js/polygon/games.js?t=".time(); + pageBuilder::$polygonScripts[] = "/js/polygon/inventory.js?t=".time(); } +pageBuilder::$polygonScripts[] = "/js/polygon/profile.js?t=".time(); pageBuilder::$polygonScripts[] = "/js/polygon/friends.js?t=".time(); -pageBuilder::$polygonScripts[] = "/js/polygon/inventory.js?t=".time(); + pageBuilder::$pageConfig["title"] = $info->username; -pageBuilder::$pageConfig["og:description"] = $info->blurb; +pageBuilder::$pageConfig["og:description"] = Polygon::FilterText($info->blurb); pageBuilder::$pageConfig["og:image"] = Thumbnails::GetAvatar($info->id, 420, 420); -pageBuilder::$pageConfig["app-attributes"] = ' data-user-id="'.$info->id.'"'; +pageBuilder::$pageConfig["app-attributes"] = " data-user-id=\"{$info->id}\""; pageBuilder::buildHeader(); if($moderation) { ?> -

+ -
-
-
+
+
+

Profile

(View Public Profile) - id); ?> + id); ?>

mb-0">[ ]

https://
<?=$info->username?> -

blurb, false)?>

+

blurb)?>

id != SESSION["userId"]) { if(!$friendship) { ?> @@ -74,204 +76,221 @@ if($moderation) { status == 0) { ?> Friend Request Pending - Unfriend + Unfriend Send Friend Request Send Message
- +
- -
+ +
+

Alternate Accounts

- + id) as $alt) { ?>

"> (Created )

- + +
+

+
+ +
+
+
+ $name +
$name
+
+ +
+
+
+ +
+
+

Groups

+
+

+
+ +
+
+
+ $Name +
+

$Name

+
+
+
+
+
+

Rank: $Role

+

Members: $MemberCount

+
+
+
+
+
+
+
+
+

Statistics

+
+
+

Friends:

+

forum.">Forum Posts:

+

account.">Joined:

+
+
+

friends?>

+

posts?>

+

joined?>

+
+
+
-
+
+

Games

have any games
-
-
- +
+ +
+ +
+

$server_description

+ +
-
- +
+ +
+ friends?>

Friends

- -
-
-
-

-
-
-
-
- $username - $username -
+
+
+

+
+
+
+
+ $username + $username
-
- +
-
-
-

Inventory

-
-
- -
-
-
-
-

-
-
- - -
-
-
- $item_name -
-

$item_name

-

Creator: $creator_name

-

$price

-
-
-
-
- -
-
-
- $name -

$name

-
-
-
- -