diff options
author | kondou <kondou@ts.unde.re> | 2013-07-29 11:34:38 +0200 |
---|---|---|
committer | kondou <kondou@ts.unde.re> | 2013-08-25 21:04:04 +0200 |
commit | fac671b14ed06233d37ad38194ebf9a99118644a (patch) | |
tree | db99cca8e2ee41b79b444b44f8a429bf8fe32b8a /lib/avatar.php | |
parent | 4a08f7d710ced1c564e05471e1f873ecfb9ca161 (diff) | |
download | nextcloud-server-fac671b14ed06233d37ad38194ebf9a99118644a.tar.gz nextcloud-server-fac671b14ed06233d37ad38194ebf9a99118644a.zip |
Modularize get(), async getAvatar, avatars @ usermgmt
And other small improvements
Diffstat (limited to 'lib/avatar.php')
-rw-r--r-- | lib/avatar.php | 113 |
1 files changed, 92 insertions, 21 deletions
diff --git a/lib/avatar.php b/lib/avatar.php index 2b087c48b65..b232e9be762 100644 --- a/lib/avatar.php +++ b/lib/avatar.php @@ -6,9 +6,15 @@ * See the COPYING-README file. */ +/** + * This class gets and sets users avatars. + * Avalaible backends are local (saved in users root at avatar.[png|jpg]) and gravatar. + * However the get function is easy to extend with further backends. +*/ + class OC_Avatar { /** - * @brief gets the users avatar + * @brief gets a link to the users avatar * @param $user string username * @param $size integer size in px of the avatar, defaults to 64 * @return mixed link to the avatar, false if avatars are disabled @@ -19,41 +25,106 @@ class OC_Avatar { // avatars are disabled return false; } elseif ($mode === "gravatar") { - $email = OC_Preferences::getValue($user, 'settings', 'email'); - if ($email !== null) { - $emailhash = md5(strtolower(trim($email))); - $url = "http://www.gravatar.com/avatar/".$emailhash."?s=".$size; - return $url; - } else { - return \OC_Avatar::getDefaultAvatar($size); - } + return \OC_Avatar::getGravatar($user, $size); } elseif ($mode === "local") { - if (false) { - // - } else { - return \OC_Avatar::getDefaultAvatar($size); - } + return \OC_Avatar::getLocalAvatar($user, $size); } } + /** + * @brief returns the active avatar mode + * @return string active avatar mode + */ + public static function getMode () { + return OC_Config::getValue("avatar", "local"); + } /** * @brief sets the users local avatar * @param $user string user to set the avatar for - * @param $path string path where the avatar is + * @param $img mixed imagedata to set a new avatar, or false to delete the current avatar + * @param $type string fileextension + * @throws Exception if the provided image is not valid, or not a square * @return true on success */ - public static function setLocalAvatar ($user, $path) { - if (OC_Config::getValue("avatar", "local") === "local") { - // + public static function setLocalAvatar ($user, $img, $type) { + $view = new \OC\Files\View('/'.$user); + + if ($img === false) { + $view->unlink('avatar.jpg'); + $view->unlink('avatar.png'); + return true; + } else { + $img = new OC_Image($img); + + if (!( $img->valid() && ($img->height() === $img->width()) )) { + throw new Exception(); + } + + $view->unlink('avatar.jpg'); + $view->unlink('avatar.png'); + $view->file_put_contents('avatar.'.$type, $img); + return true; + } + } + + /** + * @brief get the users gravatar + * @param $user string which user to get the gravatar for + * @param size integer size in px of the avatar, defaults to 64 + * @return string link to the gravatar, or base64encoded, html-ready image + */ + public static function getGravatar ($user, $size = 64) { + $email = OC_Preferences::getValue($user, 'settings', 'email'); + if ($email !== null) { + $emailhash = md5(strtolower(trim($email))); + $url = "http://www.gravatar.com/avatar/".$emailhash."?s=".$size; + return $url; + } else { + return \OC_Avatar::wrapIntoImg(\OC_Avatar::getDefaultAvatar($size), 'png'); + } + } + + /** + * @brief get the local avatar + * @param $user string which user to get the avatar for + * @param $size integer size in px of the avatar, defaults to 64 + * @return string base64encoded encoded, html-ready image + */ + public static function getLocalAvatar ($user, $size = 64) { + $view = new \OC\Files\View('/'.$user); + + if ($view->file_exists('avatar.jpg')) { + $type = 'jpg'; + } elseif ($view->file_exists('avatar.png')) { + $type = 'png'; + } else { + return \OC_Avatar::wrapIntoImg(\OC_Avatar::getDefaultAvatar($size), 'png'); } + + $avatar = new OC_Image($view->file_get_contents('avatar.'.$type)); + $avatar->resize($size); + return \OC_Avatar::wrapIntoImg((string)$avatar, $type); } /** * @brief gets the default avatar - * @return link to the default avatar + * @param $size integer size of the avatar in px, defaults to 64 + * @return string base64 encoded default avatar + */ + public static function getDefaultAvatar ($size = 64) { + $default = new OC_Image(OC::$SERVERROOT."/core/img/defaultavatar.png"); + $default->resize($size); + return (string)$default; + } + + /** + * @brief wrap a base64encoded image, so it can be used in html + * @param $img string base64encoded image + * @param $type string imagetype + * @return string wrapped image */ - public static function getDefaultAvatar ($size) { - return OC_Helper::imagePath("core", "defaultavatar.png"); + public static function wrapIntoImg($img, $type) { + return 'data:image/'.$type.';base64,'.$img; } } |