diff --git a/README.md b/README.md index c305b16..606d023 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,9 @@ $api->news->... // accesses the shop endpoint (https://fortnite-api.com/shop) $api->shop->... + +// accesses the creatorcode endpoint (https://fortnite-api.com/creatorcode) +$api->creatorCode->... ``` ```php diff --git a/src/Components/Endpoints/CreatorCodeEndpoint.php b/src/Components/Endpoints/CreatorCodeEndpoint.php new file mode 100644 index 0000000..66389aa --- /dev/null +++ b/src/Components/Endpoints/CreatorCodeEndpoint.php @@ -0,0 +1,152 @@ +getAsync($slug); + + if ($promise == null) { + return null; + } else { + return $promise->await(); + } + } + + /** + * Returns the creator code data for a given slug. + * + * @param string|array|mixed $slug + * @return null|CreatorCodeTask + */ + public function getAsync($slug) + { + FortniteApiError::clearLastError(); + + if (empty($slug)) { + FortniteApiError::setLastError("Missing paramter 'slug'."); + + return null; + } + + $path = "/creatorcode"; + + $query = [ + "slug" => $slug + ]; + + $promise = HttpClient::getInstance()->getAsync($path, [ + "query" => $query + ]); + + return new CreatorCodeTask($promise); + } + + /** + * Returns the first creator code matching the given slug. + * + * @param string|array|mixed $slug + * @return null|CreatorCode + */ + public function search($slug) + { + $promise = $this->searchAsync($slug); + + if ($promise == null) { + return null; + } else { + return $promise->await(); + } + } + + /** + * Returns the first creator code matching the given slug. + * + * @param string|array|mixed $slug + * @return null|CreatorCodeTask + */ + public function searchAsync($slug) + { + FortniteApiError::clearLastError(); + + if (empty($slug)) { + FortniteApiError::setLastError("Missing paramter 'slug'."); + + return null; + } + + $path = "/creatorcode/search"; + + $query = [ + "slug" => $slug + ]; + + $promise = HttpClient::getInstance()->getAsync($path, [ + "query" => $query + ]); + + return new CreatorCodeTask($promise); + } + + /** + * Returns the all creator codes matching the given slug. + * + * @param string|array|mixed $slug + * @return null|CreatorCode[]|array|mixed + */ + public function searchAll($slug) + { + $promise = $this->searchAllAsync($slug); + + if ($promise == null) { + return null; + } else { + return $promise->await(); + } + } + + /** + * Returns the all creator codes matching the given slug. + * + * @param string|array|mixed $slug + * @return null|CreatorCodeArrayTask + */ + public function searchAllAsync($slug) + { + FortniteApiError::clearLastError(); + + if (empty($slug)) { + FortniteApiError::setLastError("Missing paramter 'slug'."); + + return null; + } + + $path = "/creatorcode/search/all"; + + $query = [ + "slug" => $slug + ]; + + $promise = HttpClient::getInstance()->getAsync($path, [ + "query" => $query + ]); + + return new CreatorCodeArrayTask($promise); + } +} diff --git a/src/Components/Objects/CreatorCode.php b/src/Components/Objects/CreatorCode.php new file mode 100644 index 0000000..8a1fc4e --- /dev/null +++ b/src/Components/Objects/CreatorCode.php @@ -0,0 +1,100 @@ +createObjectFromBody($body); + } + + public static function createObjectArray($body) + { + return self::getActivator()->createArrayFromBody($body); + } + + /** + * Undocumented function + * + * @param CreatorCode $obj + * @param array|mixed $body + * @return bool + */ + private static function initializeObject(&$obj, &$body) + { + try { + $obj->id = $body["id"]; + $obj->slug = $body["slug"]; + $obj->displayName = $body["displayName"]; + $obj->status = $body["status"]; + $obj->verified = $body["verified"]; + + return true; + } catch (Exception $ex) { + return false; + } + } + + /** + * Undocumented function + * + * @return Activator + */ + private static function getActivator() + { + if (empty(self::$_activator)) { + self::$_activator = new Activator(function () { + return new CreatorCode(); + }, function (&$obj, &$body) { + return self::initializeObject($obj, $body); + }); + } + + return self::$_activator; + } +} diff --git a/src/Components/Tasks/CreatorCodeArrayTask.php b/src/Components/Tasks/CreatorCodeArrayTask.php new file mode 100644 index 0000000..01386b4 --- /dev/null +++ b/src/Components/Tasks/CreatorCodeArrayTask.php @@ -0,0 +1,53 @@ +getStatusCode(); + + if (!HttpClient::isSuccess($statusCode)) { + FortniteApiError::setLastError("Request failed.", $response); + + return null; + } + + $body = $response->getBody(); + + if (empty($body)) { + return CreatorCode::createObjectArray(null); + } + + $text = (string)$body; + + return CreatorCode::createObjectArray($text); + } catch (Exception $ex) { + FortniteApiError::setLastError($ex->getMessage()); + + return null; + } + } +} diff --git a/src/Components/Tasks/CreatorCodeTask.php b/src/Components/Tasks/CreatorCodeTask.php new file mode 100644 index 0000000..a0f2ca6 --- /dev/null +++ b/src/Components/Tasks/CreatorCodeTask.php @@ -0,0 +1,53 @@ +getStatusCode(); + + if (!HttpClient::isSuccess($statusCode)) { + FortniteApiError::setLastError("Request failed.", $response); + + return null; + } + + $body = $response->getBody(); + + if (empty($body)) { + return CreatorCode::createObject(null); + } + + $text = (string)$body; + + return CreatorCode::createObject($text); + } catch (Exception $ex) { + FortniteApiError::setLastError($ex->getMessage()); + + return null; + } + } +} diff --git a/src/FortniteApi.php b/src/FortniteApi.php index afd1dd4..d0d6c91 100644 --- a/src/FortniteApi.php +++ b/src/FortniteApi.php @@ -3,6 +3,7 @@ namespace FortniteApi; use FortniteApi\Components\Endpoints\CosmeticsEndpoint; +use FortniteApi\Components\Endpoints\CreatorCodeEndpoint; use FortniteApi\Components\Endpoints\NewsEndpoint; use FortniteApi\Components\Endpoints\ShopEndpoint; use FortniteApi\Config\Config; @@ -31,6 +32,13 @@ class FortniteApi */ public $news; + /** + * @inheritDoc + * + * @var CreatorCodeEndpoint $creatorCode + */ + public $creatorCode; + /** * Constructs a new FortniteApi instance. */ @@ -39,6 +47,7 @@ public function __construct() $this->cosmetics = new CosmeticsEndpoint(); $this->shop = new ShopEndpoint(); $this->news = new NewsEndpoint(); + $this->creatorCode = new CreatorCodeEndpoint(); } /** diff --git a/test/index.php b/test/index.php index f5d84db..6350612 100644 --- a/test/index.php +++ b/test/index.php @@ -16,7 +16,10 @@ "cosmeticSearchAll" => $api->cosmetics->searchAllAsync(["rarity" => "uncommon"]), "cosmetics" => $api->cosmetics->getAllAsync(), "news" => $api->news->getAsync(), - "shop" => $api->shop->getAsync() + "shop" => $api->shop->getAsync(), + "creatorCode" => $api->creatorCode->getAsync("getonmylvl"), + "creatorCodeSearch" => $api->creatorCode->searchAsync("getonmylvl"), + "creatorCodeSearchAll" => $api->creatorCode->searchAllAsync("getonmylvl"), ]; $result = [];