summaryrefslogtreecommitdiffstats
path: root/lib/avatar.php
diff options
context:
space:
mode:
authorkondou <kondou@ts.unde.re>2013-07-29 11:34:38 +0200
committerkondou <kondou@ts.unde.re>2013-08-25 21:04:04 +0200
commitfac671b14ed06233d37ad38194ebf9a99118644a (patch)
treedb99cca8e2ee41b79b444b44f8a429bf8fe32b8a /lib/avatar.php
parent4a08f7d710ced1c564e05471e1f873ecfb9ca161 (diff)
downloadnextcloud-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.php113
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;
}
}