From 7400989afed2a0108e4710ed1854a4a23eb5339c Mon Sep 17 00:00:00 2001 From: Pierre Date: Sun, 29 Apr 2018 14:55:21 +0200 Subject: [PATCH] Can get account image settings through the API --- RestControllers/SettingsController.php | 44 +++++++++++++++++++++++ classes/components/AccountImage.php | 48 +++++++++++++++++++++++--- 2 files changed, 88 insertions(+), 4 deletions(-) diff --git a/RestControllers/SettingsController.php b/RestControllers/SettingsController.php index 1caed37..b26f639 100644 --- a/RestControllers/SettingsController.php +++ b/RestControllers/SettingsController.php @@ -7,6 +7,15 @@ class SettingsController { + /** + * Account image visibility levels for the API + */ + const AccountImageVisibilityLevels = array( + AccountImageSettings::VISIBILITY_OPEN => "open", + AccountImageSettings::VISIBILITY_PUBLIC => "public", + AccountImageSettings::VISIBILITY_FRIENDS => "friends" + ); + /** * Get general account settings * @@ -187,6 +196,23 @@ class SettingsController { return array("success" => "The password has been updated !"); } + /** + * Get account image information + * + * @url POST /settings/get_account_image + */ + public function getAccountImageSettings(){ + + //User login required + user_login_required(); + + //Get the settings of the user + $settings = components()->accountImage->getSettings(userID); + + //Return parsed settings object + return $this->AccountImageSettingsToAPI($settings); + } + /** * Turn a GeneralSettings object into a valid API object * @@ -232,4 +258,22 @@ class SettingsController { return $data; } + /** + * Turn a AccountImageSettings object into API object + * + * @param AccountImageSettings $settings The settings object to convert + * @return array Generated API object + */ + private function AccountImageSettingsToAPI(AccountImageSettings $settings) : array { + + $data = array(); + + $data["has_image"] = $settings->has_image_path(); + $data["image_url"] = $settings->has_image_path() ? path_user_data($settings->get_image_path()) : null; + $data["visibility"] = self::AccountImageVisibilityLevels[$settings->get_visibility_level()]; + + return $data; + + } + } \ No newline at end of file diff --git a/classes/components/AccountImage.php b/classes/components/AccountImage.php index f98c39e..222d3e0 100644 --- a/classes/components/AccountImage.php +++ b/classes/components/AccountImage.php @@ -29,13 +29,13 @@ class AccountImage { * @return string The URL pointing on the account image */ public function getFile(int $userID) : string { - + //First, check if the account image exists $accountImageFileName = $this->getFileAccountImage($userID); if($accountImageFileName != ""){ //Get account image visibility level - $visibilityLevel = $this->visibilityLevel($userID); + $visibilityLevel = $this->getVisibilityLevel($userID); //If account image is open or if the user signed in is the user making the request if($visibilityLevel == AccountImageSettings::VISIBILITY_OPEN || userID == $userID) @@ -64,6 +64,16 @@ class AccountImage { return self::defaultAccountImage; } + /** + * Returns the path to an account image + * + * @param int $userID Target user ID + * @return string $url The URL of the account image + */ + public function getPath(int $userID) : string { + return cs()->config->get(self::accountImageDirConfItem).$this->getFile($userID); + } + /** * Returns the URL to an account image * @@ -71,7 +81,17 @@ class AccountImage { * @return string $url The URL of the account image */ public function getURL(int $userID) : string { - return path_user_data(cs()->config->get(self::accountImageDirConfItem).$this->getFile($userID)); + return path_user_data($this->getPath($userID)); + } + + /** + * Check whether a user has an account image or not + * + * @param int $userID Target user ID + * @return bool TRUE if the user has an account image / FALSE else + */ + public function has(int $userID) : bool { + return $this->getFileAccountImage($userID) != ""; } /** @@ -84,7 +104,7 @@ class AccountImage { * @param int $userID The ID of the user on which we perform researchs * @return int The visibility level of the account image */ - private function visibilityLevel(int $userID) : int { + public function getVisibilityLevel(int $userID) : int { $filePath = path_user_data(cs()->config->get(self::accountImageDirConfItem)."adresse_avatars/limit_view_".$userID.".txt", TRUE); //Check restriction file @@ -98,6 +118,26 @@ class AccountImage { return $fileContent; } + /** + * Get AccountImageSettings for an account + * + * @param int $userID ID of the target user + * @return AccountImageSettings Generated account settings object + */ + public function getSettings(int $userID) : AccountImageSettings { + + //Create and fill UserAccountImage object + $settings = new AccountImageSettings(); + + //Add user account image (if any) + if($this->has(userID)){ + $settings->set_image_path($this->getPath(userID)); + } + $settings->set_visibility_level($this->getVisibilityLevel(userID)); + + return $settings; + } + /** * Get the file to the user account image, if the user has any *