1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
<?php
/**
* Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
/**
* This class gets and sets users avatars.
* Available backends are local (saved in users root at avatar.[png|jpg]), gravatar TODO and custom backends.
* However the get function is easy to extend with further backends.
*/
class OC_Avatar {
/**
* @brief gets the users avatar
* @param $user string username, if not provided, the default avatar will be returned
* @param $size integer size in px of the avatar, defaults to 64
* @return mixed \OC_Image containing the avatar, a link to the avatar, false if avatars are disabled
*/
public static function get ($user = false, $size = 64) {
$mode = self::getMode();
if ($mode === "none") {
// avatars are disabled
return false;
} else {
if ($user === false) {
return self::getDefaultAvatar($size);
} elseif ($mode === "gravatar") {
return self::getGravatar($user, $size);
} elseif ($mode === "local") {
return self::getLocalAvatar($user, $size);
} elseif ($mode === "custom") {
return self::getCustomAvatar($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 $data mixed imagedata or path to set a new avatar, or false to delete the current avatar
* @throws Exception if the provided file is not a jpg or png image
* @throws Exception if the provided image is not valid, or not a square
* @return true on success
*/
public static function setLocalAvatar ($user, $data) {
$view = new \OC\Files\View('/'.$user);
if ($data === false) {
$view->unlink('avatar.jpg');
$view->unlink('avatar.png');
return true;
} else {
$img = new OC_Image($data);
$type = substr($img->mimeType(), -3);
if ($type === 'peg') { $type = 'jpg'; }
if ($type !== 'jpg' && $type !== 'png') {
$l = \OC_L10N::get('lib');
throw new \Exception($l->t("Unknown filetype for avatar"));
}
if (!( $img->valid() && ($img->height() === $img->width()) )) {
$l = \OC_L10N::get('lib');
throw new \Exception($l->t("Invalid image, or the provided image is not square"));
}
$view->unlink('avatar.jpg');
$view->unlink('avatar.png');
$view->file_put_contents('avatar.'.$type, $data);
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 \OC_Image with the default avatar
*/
public static function getGravatar ($user, $size = 64) {
$email = \OC_Preferences::getValue($user, 'settings', 'email');
if ($email !== null) {
$emailhash = md5(strtolower(trim($email)));
$url = "http://secure.gravatar.com/avatar/".$emailhash."?d=404&s=".$size;
$headers = get_headers($url, 1);
if (strpos($headers[0], "404 Not Found") === false) {
return $url;
}
}
return self::getDefaultAvatar($user, $size);
}
/**
* @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 \OC_Image containing the avatar
*/
public static function getLocalAvatar ($user, $size = 64) {
$view = new \OC\Files\View('/'.$user);
if ($view->file_exists('avatar.jpg')) {
$ext = 'jpg';
} elseif ($view->file_exists('avatar.png')) {
$ext = 'png';
} else {
return self::getDefaultAvatar($user, $size);
}
$avatar = new OC_Image($view->file_get_contents('avatar.'.$ext));
$avatar->resize($size);
return $avatar;
}
/**
* @todo todo
*/
public static function getCustomAvatar($user, $size) {
// TODO
}
/**
* @brief gets the default avatar
* @brief $user string which user to get the avatar for
* @param $size integer size of the avatar in px, defaults to 64
* @return \OC_Image containing the default avatar
* @todo use custom default images, when they arive
*/
public static function getDefaultAvatar ($user, $size = 64) {
$default = new OC_Image(OC::$SERVERROOT."/core/img/defaultavatar.png");
$default->resize($size);
return $default;
}
}
|