diff --git a/actions/allrss.php b/actions/allrss.php
index 90e6f7a86a..3db19ffdcc 100644
--- a/actions/allrss.php
+++ b/actions/allrss.php
@@ -129,7 +129,6 @@ class AllrssAction extends Rss10Action
if (!$profile) {
return null;
}
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- return $avatar ? $avatar->url : null;
+ return $profile->avatarUrl(AVATAR_PROFILE_SIZE);
}
}
diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php
index 7e8dd7aad6..85f22d910b 100644
--- a/actions/apitimelinefavorites.php
+++ b/actions/apitimelinefavorites.php
@@ -97,7 +97,6 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
$title = sprintf(
@@ -120,15 +119,10 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
$profile->getBestName(),
$this->user->nickname
);
- $logo = !empty($avatar)
- ? $avatar->displayUrl()
- : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
-
- $link = common_local_url(
- 'showfavorites',
- array('nickname' => $this->user->nickname)
- );
+ $logo = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $link = common_local_url('showfavorites',
+ array('nickname' => $this->user->nickname));
$self = $this->getSelfUri();
switch($this->format) {
diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php
index ed4cce4908..42cdde4c51 100644
--- a/actions/apitimelinefriends.php
+++ b/actions/apitimelinefriends.php
@@ -200,7 +200,6 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
// TRANS: Title of API timeline for a user and friends.
// TRANS: %s is a username.
@@ -215,17 +214,11 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$sitename
);
- $link = common_local_url(
- 'all',
- array('nickname' => $this->user->nickname)
- );
-
+ $logo = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $link = common_local_url('all',
+ array('nickname' => $this->user->nickname));
$self = $this->getSelfUri();
- $logo = (!empty($avatar))
- ? $avatar->displayUrl()
- : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
-
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
diff --git a/actions/apitimelinehome.php b/actions/apitimelinehome.php
index 1ca74b208e..7ef3da79f0 100644
--- a/actions/apitimelinehome.php
+++ b/actions/apitimelinehome.php
@@ -105,7 +105,6 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
// TRANS: Timeline title for user and friends. %s is a user nickname.
$title = sprintf(_("%s and friends"), $this->user->nickname);
@@ -118,17 +117,11 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$this->user->nickname, $sitename
);
- $link = common_local_url(
- 'all',
- array('nickname' => $this->user->nickname)
- );
-
+ $logo = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $link = common_local_url('all',
+ array('nickname' => $this->user->nickname));
$self = $this->getSelfUri();
- $logo = (!empty($avatar))
- ? $avatar->displayUrl()
- : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
-
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
diff --git a/actions/apitimelinementions.php b/actions/apitimelinementions.php
index 4ba8a4966b..aff4f318e9 100644
--- a/actions/apitimelinementions.php
+++ b/actions/apitimelinementions.php
@@ -104,7 +104,6 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
$title = sprintf(
@@ -115,11 +114,10 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
);
$taguribase = TagURI::base();
$id = "tag:$taguribase:Mentions:" . $this->user->id;
- $link = common_local_url(
- 'replies',
- array('nickname' => $this->user->nickname)
- );
+ $logo = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $link = common_local_url('replies',
+ array('nickname' => $this->user->nickname));
$self = $this->getSelfUri();
$subtitle = sprintf(
@@ -129,7 +127,6 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
_('%1$s updates that reply to updates from %2$s / %3$s.'),
$sitename, $this->user->nickname, $profile->getBestName()
);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
case 'xml':
diff --git a/actions/apiuserprofileimage.php b/actions/apiuserprofileimage.php
index 08af1789c6..81b447f7e7 100644
--- a/actions/apiuserprofileimage.php
+++ b/actions/apiuserprofileimage.php
@@ -90,12 +90,7 @@ class ApiUserProfileImageAction extends ApiPrivateAuthAction
}
$size = $this->avatarSize();
- $avatar = $profile->getAvatar($size);
- if ($avatar) {
- $url = $avatar->displayUrl();
- } else {
- $url = Avatar::defaultImage($size);
- }
+ $url = $profile->avatarUrl($size);
// We don't actually output JSON or XML data -- redirect!
common_redirect($url, 302);
diff --git a/actions/avatarbynickname.php b/actions/avatarbynickname.php
index 487f66644e..5e02a4db34 100644
--- a/actions/avatarbynickname.php
+++ b/actions/avatarbynickname.php
@@ -28,19 +28,18 @@
* along with this program. If not, see .
*/
-if (!defined('STATUSNET') && !defined('LACONICA')) {
- exit(1);
-}
+if (!defined('GNUSOCIAL')) { exit(1); }
/**
* Retrieve user avatar by nickname action class.
*
* @category Action
- * @package StatusNet
+ * @package GNUSocial
* @author Evan Prodromou
* @author Robin Millette
+ * @author Mikael Nordfeldth
* @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
- * @link http://status.net/
+ * @link http://www.gnu.org/software/social/
*/
class AvatarbynicknameAction extends Action
{
@@ -51,55 +50,38 @@ class AvatarbynicknameAction extends Action
*
* @return boolean false if nickname or user isn't found
*/
- function handle($args)
+ protected function handle()
{
- parent::handle($args);
+ parent::handle();
$nickname = $this->trimmed('nickname');
if (!$nickname) {
// TRANS: Client error displayed trying to get an avatar without providing a nickname.
$this->clientError(_('No nickname.'));
- return;
- }
- $size = $this->trimmed('size');
- if (!$size) {
- // TRANS: Client error displayed trying to get an avatar without providing an avatar size.
- $this->clientError(_('No size.'));
- return;
- }
- $size = strtolower($size);
- if (!in_array($size, array('original', '96', '48', '24'))) {
- // TRANS: Client error displayed trying to get an avatar providing an invalid avatar size.
- $this->clientError(_('Invalid size.'));
- return;
}
+ $size = $this->trimmed('size') ?: 'original';
$user = User::getKV('nickname', $nickname);
if (!$user) {
// TRANS: Client error displayed trying to get an avatar for a non-existing user.
$this->clientError(_('No such user.'));
- return;
}
$profile = $user->getProfile();
if (!$profile) {
// TRANS: Error message displayed when referring to a user without a profile.
$this->clientError(_('User has no profile.'));
- return;
- }
- if ($size == 'original') {
- $avatar = $profile->getOriginal();
- } else {
- $avatar = $profile->getAvatar($size+0);
}
- if ($avatar) {
- $url = $avatar->url;
- } else {
- if ($size == 'original') {
+ if ($size === 'original') {
+ try {
+ $avatar = Avatar::getOriginal($profile);
+ $url = $avatar->url;
+ } catch (Exception $e) {
$url = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
- } else {
- $url = Avatar::defaultImage($size+0);
}
+ } else {
+ $url = $profile->avatarUrl($size);
}
+
common_redirect($url, 302);
}
diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php
index 77c6681c3c..1f4eec5f5d 100644
--- a/actions/avatarsettings.php
+++ b/actions/avatarsettings.php
@@ -140,9 +140,8 @@ class AvatarsettingsAction extends SettingsAction
// No original avatar found!
}
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
-
- if ($avatar) {
+ try {
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$this->elementStart('li', array('id' => 'avatar_preview',
'class' => 'avatar_view'));
// TRANS: Header on avatar upload page for thumbnail of to be used rendition of uploaded avatar (h2).
@@ -158,6 +157,8 @@ class AvatarsettingsAction extends SettingsAction
$this->submit('delete', _m('BUTTON','Delete'));
}
$this->elementEnd('li');
+ } catch (Exception $e) {
+ // No previously uploaded avatar to preview.
}
$this->elementStart('li', array ('id' => 'settings_attach'));
@@ -354,7 +355,7 @@ class AvatarsettingsAction extends SettingsAction
*
* @return void
*/
- function cropAvatar()
+ public function cropAvatar()
{
$filedata = $_SESSION['FILEDATA'];
@@ -371,7 +372,7 @@ class AvatarsettingsAction extends SettingsAction
$dest_y = $this->arg('avatar_crop_y') ? $this->arg('avatar_crop_y'):0;
$dest_w = $this->arg('avatar_crop_w') ? $this->arg('avatar_crop_w'):$file_d;
$dest_h = $this->arg('avatar_crop_h') ? $this->arg('avatar_crop_h'):$file_d;
- $size = min($dest_w, $dest_h, MAX_ORIGINAL);
+ $size = floor(min($dest_w, $dest_h, MAX_ORIGINAL));
$user = common_current_user();
$profile = $user->getProfile();
diff --git a/actions/foaf.php b/actions/foaf.php
index 7f76c222cb..ee6ef85ef6 100644
--- a/actions/foaf.php
+++ b/actions/foaf.php
@@ -146,11 +146,13 @@ class FoafAction extends Action
$this->elementStart('img');
$this->elementStart('Image', array('rdf:about' => $avatar->url));
foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
- $scaled = $this->profile->getAvatar($size);
- if (!$scaled->original) { // sometimes the original has one of our scaled sizes
+ try {
+ $scaled = Avatar::getOriginal($this->profile);
$this->elementStart('thumbnail');
$this->element('Image', array('rdf:about' => $scaled->url));
$this->elementEnd('thumbnail');
+ } catch (Exception $e) {
+ // This avatar did not exist
}
}
$this->elementEnd('Image');
diff --git a/actions/repliesrss.php b/actions/repliesrss.php
index 0c71130718..8a8f64e0c2 100644
--- a/actions/repliesrss.php
+++ b/actions/repliesrss.php
@@ -78,13 +78,8 @@ class RepliesrssAction extends Rss10Action
function getImage()
{
- $user = $this->user;
- $profile = $user->getProfile();
- if (!$profile) {
- return null;
- }
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- return ($avatar) ? $avatar->url : null;
+ $profile = $this->user->getProfile();
+ return $profile->avatarUrl(AVATAR_PROFILE_SIZE);
}
function isReadOnly($args)
diff --git a/actions/shownotice.php b/actions/shownotice.php
index 3b3e50884d..6a026d2d36 100644
--- a/actions/shownotice.php
+++ b/actions/shownotice.php
@@ -102,7 +102,11 @@ class ShownoticeAction extends Action
$this->user = User::getKV('id', $this->profile->id);
- $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ try {
+ $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ } catch (Exception $e) {
+ $this->avatar = null;
+ }
return true;
}
@@ -317,10 +321,7 @@ class ShownoticeAction extends Action
'title'=>'oEmbed'),null);
// Extras to aid in sharing notices to Facebook
- $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
- $avatarUrl = ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $avatarUrl = $this->profile->avatarUrl(AVATAR_PROFILE_SIZE);
$this->element('meta', array('property' => 'og:image',
'content' => $avatarUrl));
$this->element('meta', array('property' => 'og:description',
diff --git a/actions/tagprofile.php b/actions/tagprofile.php
index 3acb9e4a86..e9d855c497 100644
--- a/actions/tagprofile.php
+++ b/actions/tagprofile.php
@@ -107,8 +107,8 @@ class TagprofileAction extends Action
// TRANS: Header in list form.
$this->element('h2', null, _('User profile'));
- $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
- $this->element('img', array('src' => ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE),
+ $avatarUrl = $this->profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $this->element('img', array('src' => $avatarUrl,
'class' => 'photo avatar entity_depiction',
'width' => AVATAR_PROFILE_SIZE,
'height' => AVATAR_PROFILE_SIZE,
diff --git a/actions/userrss.php b/actions/userrss.php
index a688cbf371..239b5e5174 100644
--- a/actions/userrss.php
+++ b/actions/userrss.php
@@ -102,14 +102,12 @@ class UserrssAction extends Rss10Action
{
$user = $this->user;
$profile = $user->getProfile();
- if (!$profile) {
- common_log_db_error($user, 'SELECT', __FILE__);
- // TRANS: Error message displayed when referring to a user without a profile.
- $this->serverError(_('User has no profile.'));
+ try {
+ $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
+ return $avatar->url;
+ } catch (Exception $e) {
return null;
}
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- return ($avatar) ? $avatar->url : null;
}
// override parent to add X-SUP-ID URL
diff --git a/classes/Avatar.php b/classes/Avatar.php
index 40f9bc6bc9..782899de79 100644
--- a/classes/Avatar.php
+++ b/classes/Avatar.php
@@ -49,8 +49,8 @@ class Avatar extends Managed_DataObject
),
);
}
- // We clean up the file, too
+ // We clean up the file, too
function delete()
{
$filename = $this->filename;
@@ -59,11 +59,26 @@ class Avatar extends Managed_DataObject
}
}
- public static function deleteFromProfile(Profile $target) {
- $avatars = Avatar::getProfileAvatars($target->id);
- foreach ($avatars as $avatar) {
- $avatar->delete();
+ /*
+ * Deletes all avatars (but may spare the original) from a profile.
+ *
+ * @param Profile $target The profile we're deleting avatars of.
+ * @param boolean $original Whether original should be removed or not.
+ */
+ public static function deleteFromProfile(Profile $target, $original=true) {
+ try {
+ $avatars = self::getProfileAvatars($target);
+ foreach ($avatars as $avatar) {
+ if ($avatar->original && !$original) {
+ continue;
+ }
+ $avatar->delete();
+ }
+ } catch (NoResultException $e) {
+ // There are no avatars to delete, a sort of success.
}
+
+ return true;
}
public static function getOriginal(Profile $target)
@@ -77,9 +92,21 @@ class Avatar extends Managed_DataObject
return $avatar;
}
+ public static function hasOriginal($profile) {
+ try {
+ $avatar = Avatar::getOriginal($profile);
+ } catch (NoResultException $e) {
+ return false;
+ }
+ return !file_exists(Avatar::path($avatar->filename));
+ }
+
public static function getProfileAvatars(Profile $target) {
$avatar = new Avatar();
$avatar->profile_id = $target->id;
+ if (!$avatar->find()) {
+ throw new NoResultException($avatar);
+ }
return $avatar->fetchAll();
}
@@ -160,9 +187,9 @@ class Avatar extends Managed_DataObject
static function newSize(Profile $target, $size) {
$size = floor($size);
- if ($size <1 || $size > 999) {
+ if ($size < 1 || $size > common_config('avatar', 'maxsize')) {
// TRANS: An error message when avatar size is unreasonable
- throw new Exception(_m('Unreasonable avatar size'));
+ throw new Exception(_m('Avatar size too large'));
}
$original = Avatar::getOriginal($target);
@@ -175,7 +202,8 @@ class Avatar extends Managed_DataObject
$scaled->width = $size;
$scaled->height = $size;
$scaled->url = Avatar::url($filename);
- $scaled->created = DB_DataObject_Cast::dateTime();
+ $scaled->filename = $filename;
+ $scaled->created = common_sql_now();
if (!$scaled->insert()) {
// TRANS: An error message when unable to insert avatar data into the db
diff --git a/classes/Managed_DataObject.php b/classes/Managed_DataObject.php
index ae37dd02ea..c005ce6662 100644
--- a/classes/Managed_DataObject.php
+++ b/classes/Managed_DataObject.php
@@ -111,7 +111,7 @@ abstract class Managed_DataObject extends Memcached_DataObject
}
/**
- * Get a multi-instance object in an array
+ * Get a multi-instance object separated into an array
*
* This is a utility method to get multiple instances with a given set of
* values for a specific key column. Usually used for the primary key when
diff --git a/classes/Memcached_DataObject.php b/classes/Memcached_DataObject.php
index d5f1916907..03c0b8a523 100644
--- a/classes/Memcached_DataObject.php
+++ b/classes/Memcached_DataObject.php
@@ -276,7 +276,6 @@ class Memcached_DataObject extends Safe_DataObject
throw new NoResultException($i);
}
- sprintf(__CLASS__ . "() got {$i->N} results for class $cls key $keyCol");
return $i;
}
diff --git a/classes/Profile.php b/classes/Profile.php
index a468c99128..afb3df6a5b 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -116,52 +116,47 @@ class Profile extends Managed_DataObject
return true;
}
- protected $_avatars;
-
public function getAvatar($width, $height=null)
{
+ $width = (int) floor($width);
+
if (is_null($height)) {
$height = $width;
}
- $avatar = $this->_getAvatar($width);
-
- if (empty($avatar)) {
- if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) {
- $avatar = Avatar::pkeyGet(
- array(
- 'profile_id' => $this->id,
- 'width' => $width,
- 'height' => $height
- )
- );
- Event::handle('EndProfileGetAvatar', array($this, $width, &$avatar));
- }
-
- // if-empty within an if-empty? Let's find a prettier solution...
- if (empty($avatar)) {
- // Obviously we can't find an avatar, so let's resize the original!
- try {
- $avatar = Avatar::newSize($this, $width);
- } catch (Exception $e) {
- // Could not generate a resized avatar. How do we handle it?
- }
- }
-
- // cache the avatar for future use
- $this->_fillAvatar($width, $avatar);
+ try {
+ return $this->_getAvatar($width);
+ } catch (Exception $e) {
+ $avatar = null;
}
+
+ if (Event::handle('StartProfileGetAvatar', array($this, $width, &$avatar))) {
+ $avatar = Avatar::pkeyGet(
+ array(
+ 'profile_id' => $this->id,
+ 'width' => $width,
+ 'height' => $height
+ )
+ );
+ Event::handle('EndProfileGetAvatar', array($this, $width, &$avatar));
+ }
+
+ if (is_null($avatar)) {
+ // Obviously we can't find an avatar, so let's resize the original!
+ $avatar = Avatar::newSize($this, $width);
+ }
+
+ // cache the avatar for future use
+ $this->_fillAvatar($width, $avatar);
return $avatar;
}
+ protected $_avatars = array();
+
// XXX: @Fix me gargargar
function _getAvatar($width)
{
- if (empty($this->_avatars)) {
- $this->_avatars = array();
- }
-
// GAR! I cannot figure out where _avatars gets pre-filled with the avatar from
// the previously used profile! Please shoot me now! --Zach
if (array_key_exists($width, $this->_avatars)) {
@@ -171,7 +166,7 @@ class Profile extends Managed_DataObject
}
}
- return null;
+ throw new Exception('No cached avatar available for size ');
}
protected function _fillAvatar($width, $avatar)
@@ -207,8 +202,8 @@ class Profile extends Managed_DataObject
$avatar->created = DB_DataObject_Cast::dateTime(); # current time
// XXX: start a transaction here
-
- if (!$this->delete_avatars() || !$avatar->insert()) {
+ if (!Avatar::deleteFromProfile($this, true) || !$avatar->insert()) {
+ // If we can't delete the old avatars, let's abort right here.
@unlink(Avatar::path($filename));
return null;
}
@@ -227,30 +222,6 @@ class Profile extends Managed_DataObject
return $avatar;
}
- /**
- * Delete attached avatars for this user from the database and filesystem.
- * This should be used instead of a batch delete() to ensure that files
- * get removed correctly.
- *
- * @param boolean $original true to delete only the original-size file
- * @return
- */
- function delete_avatars($original=true)
- {
- $avatar = new Avatar();
- $avatar->profile_id = $this->id;
- $avatar->find();
- while ($avatar->fetch()) {
- if ($avatar->original) {
- if ($original == false) {
- continue;
- }
- }
- $avatar->delete();
- }
- return true;
- }
-
/**
* Gets either the full name (if filled) or the nickname.
*
@@ -636,10 +607,11 @@ class Profile extends Managed_DataObject
function avatarUrl($size=AVATAR_PROFILE_SIZE)
{
- $avatar = $this->getAvatar($size);
- if ($avatar) {
+ $size = floor($size);
+ try {
+ $avatar = $this->getAvatar($size);
return $avatar->displayUrl();
- } else {
+ } catch (Exception $e) {
return Avatar::defaultImage($size);
}
}
@@ -913,7 +885,7 @@ class Profile extends Managed_DataObject
$this->_deleteMessages();
$this->_deleteTags();
$this->_deleteBlocks();
- $this->delete_avatars();
+ Avatar::deleteFromProfile($this, true);
// Warning: delete() will run on the batch objects,
// not on individual objects.
diff --git a/lib/accountprofileblock.php b/lib/accountprofileblock.php
index c63bded46a..36f1fee271 100644
--- a/lib/accountprofileblock.php
+++ b/lib/accountprofileblock.php
@@ -60,13 +60,7 @@ class AccountProfileBlock extends ProfileBlock
function avatar()
{
- $avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
- if (empty($avatar)) {
- $avatar = $this->profile->getAvatar(73);
- }
- return (!empty($avatar)) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ return $this->profile->avatarUrl(AVATAR_PROFILE_SIZE);
}
function name()
diff --git a/lib/activityobject.php b/lib/activityobject.php
index 0b29888083..102f3369b0 100644
--- a/lib/activityobject.php
+++ b/lib/activityobject.php
@@ -474,27 +474,15 @@ class ActivityObject
foreach ($sizes as $size) {
$alink = null;
- $avatar = $profile->getAvatar($size);
-
- if (!empty($avatar)) {
+ try {
+ $avatar = $profile->getAvatar($size);
$alink = AvatarLink::fromAvatar($avatar);
- } else {
+ } catch (Exception $e) {
$alink = new AvatarLink();
$alink->type = 'image/png';
$alink->height = $size;
$alink->width = $size;
$alink->url = Avatar::defaultImage($size);
-
- if ($size == AVATAR_PROFILE_SIZE) {
- // Hack for Twitter import: we don't have a 96x96 image,
- // but we do have a 73x73 image. For now, fake it with that.
- $avatar = $profile->getAvatar(73);
- if ($avatar) {
- $alink = AvatarLink::fromAvatar($avatar);
- $alink->height= $size;
- $alink->width = $size;
- }
- }
}
$object->avatarLinks[] = $alink;
diff --git a/lib/apiaction.php b/lib/apiaction.php
index 54c0822448..8fdf91a5ac 100644
--- a/lib/apiaction.php
+++ b/lib/apiaction.php
@@ -214,9 +214,7 @@ class ApiAction extends Action
$twitter_user['location'] = ($profile->location) ? $profile->location : null;
$twitter_user['description'] = ($profile->bio) ? $profile->bio : null;
- $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
- $twitter_user['profile_image_url'] = ($avatar) ? $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_STREAM_SIZE);
+ $twitter_user['profile_image_url'] = $profile->avatarUrl(AVATAR_STREAM_SIZE);
$twitter_user['url'] = ($profile->homepage) ? $profile->homepage : null;
$twitter_user['protected'] = (!empty($user) && $user->private_stream) ? true : false;
@@ -995,10 +993,13 @@ class ApiAction extends Action
$entry['author-name'] = $from->getBestName();
$entry['author-uri'] = $from->homepage;
- $avatar = $from->getAvatar(AVATAR_STREAM_SIZE);
-
- $entry['avatar'] = (!empty($avatar)) ? $avatar->url : Avatar::defaultImage(AVATAR_STREAM_SIZE);
- $entry['avatar-type'] = (!empty($avatar)) ? $avatar->mediatype : 'image/png';
+ $entry['avatar'] = $from->avatarUrl(AVATAR_STREAM_SIZE);
+ try {
+ $avatar = $from->getAvatar(AVATAR_STREAM_SIZE);
+ $entry['avatar-type'] = $avatar->mediatype;
+ } catch (Exception $e) {
+ $entry['avatar-type'] = 'image/png';
+ }
// RSS item specific
diff --git a/lib/atomusernoticefeed.php b/lib/atomusernoticefeed.php
index fb0ac5f831..5180725722 100644
--- a/lib/atomusernoticefeed.php
+++ b/lib/atomusernoticefeed.php
@@ -97,9 +97,7 @@ class AtomUserNoticeFeed extends AtomNoticeFeed
);
$this->setSubtitle($subtitle);
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- $logo = ($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
- $this->setLogo($logo);
+ $this->setLogo($profile->avatarUrl(AVATAR_PROFILE_SIZE));
$this->setUpdated('now');
diff --git a/lib/default.php b/lib/default.php
index 7aa50bc3d9..cc81910b89 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -131,11 +131,14 @@ $default =
'restore' => true,
'delete' => false,
'move' => true),
+ 'image' =>
+ array('jpegquality' => 85),
'avatar' =>
array('server' => null,
'dir' => INSTALLDIR . '/avatar/',
'path' => $_path . '/avatar/',
- 'ssl' => null),
+ 'ssl' => null,
+ 'maxsize' => 300),
'background' =>
array('server' => null,
'dir' => INSTALLDIR . '/background/',
diff --git a/lib/defaultprofileblock.php b/lib/defaultprofileblock.php
index 78c7c4a118..f451aa0188 100644
--- a/lib/defaultprofileblock.php
+++ b/lib/defaultprofileblock.php
@@ -63,13 +63,7 @@ class DefaultProfileBlock extends AccountProfileBlock
function avatar()
{
- $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
- if (empty($avatar)) {
- $avatar = $this->profile->getAvatar(73);
- }
- return (!empty($avatar)) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_STREAM_SIZE);
+ return $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
}
function location()
@@ -91,4 +85,4 @@ class DefaultProfileBlock extends AccountProfileBlock
{
return array();
}
-}
\ No newline at end of file
+}
diff --git a/lib/imagefile.php b/lib/imagefile.php
index 0e06720247..ae14654bfb 100644
--- a/lib/imagefile.php
+++ b/lib/imagefile.php
@@ -247,7 +247,7 @@ class ImageFile
imagegif($image_dest, $outpath);
break;
case IMAGETYPE_JPEG:
- imagejpeg($image_dest, $outpath, 100);
+ imagejpeg($image_dest, $outpath, common_config('image', 'jpegquality'));
break;
case IMAGETYPE_PNG:
imagepng($image_dest, $outpath);
diff --git a/lib/jsonsearchresultslist.php b/lib/jsonsearchresultslist.php
index 7ae2b9953c..48540a4d58 100644
--- a/lib/jsonsearchresultslist.php
+++ b/lib/jsonsearchresultslist.php
@@ -243,10 +243,7 @@ class ResultItem
$this->source = $this->getSourceLink($this->notice->source);
- $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
-
- $this->profile_image_url = ($avatar) ?
- $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE);
+ $this->profile_image_url = $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
$this->created_at = common_date_rfc2822($this->notice->created);
}
diff --git a/lib/messagelistitem.php b/lib/messagelistitem.php
index 9c9a0335c6..2590d7df63 100644
--- a/lib/messagelistitem.php
+++ b/lib/messagelistitem.php
@@ -76,10 +76,8 @@ abstract class MessageListItem extends Widget
$this->out->elementStart('span', 'vcard author');
$this->out->elementStart('a', array('href' => $profile->profileurl,
'class' => 'url'));
- $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
- $this->out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_STREAM_SIZE),
+ $avatarUrl = $profile->avatarUrl(AVATAR_STREAM_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
diff --git a/lib/noresultexception.php b/lib/noresultexception.php
index d847852282..61e1a1f75a 100644
--- a/lib/noresultexception.php
+++ b/lib/noresultexception.php
@@ -2,7 +2,7 @@
/**
* StatusNet, the distributed open-source microblogging tool
*
- * class for an exception when a database lookup returns no results
+ * Class for an exception when a database lookup returns no results
*
* PHP version 5
*
@@ -20,26 +20,14 @@
* along with this program. If not, see .
*
* @category Exception
- * @package StatusNet
+ * @package GNUSocial
* @author Mikael Nordfeldth
* @copyright 2013 Free Software Foundation, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
+ * @link http://www.gnu.org/software/social/
*/
-if (!defined('GNUSOCIAL')) {
- exit(1);
-}
-
-/**
- * Class for an exception when a local user is not found by certain criteria
- *
- * @category Exception
- * @package StatusNet
- * @author Mikael Nordfeldth
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
+if (!defined('GNUSOCIAL')) { exit(1); }
class NoResultException extends ServerException
{
diff --git a/lib/noticelistitem.php b/lib/noticelistitem.php
index f829f963ee..8fa5c5dcd4 100644
--- a/lib/noticelistitem.php
+++ b/lib/noticelistitem.php
@@ -327,11 +327,9 @@ class NoticeListItem extends Widget
{
$avatar_size = $this->avatarSize();
- $avatar = $this->profile->getAvatar($avatar_size);
+ $avatarUrl = $this->profile->avatarUrl($avatar_size);
- $this->out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage($avatar_size),
+ $this->out->element('img', array('src' => $avatarUrl,
'class' => 'avatar photo',
'width' => $avatar_size,
'height' => $avatar_size,
diff --git a/lib/noticesection.php b/lib/noticesection.php
index 2edd6e09a5..4c6aeb3b5d 100644
--- a/lib/noticesection.php
+++ b/lib/noticesection.php
@@ -78,14 +78,14 @@ class NoticeSection extends Section
}
$this->out->elementStart('li', 'hentry notice');
$this->out->elementStart('div', 'entry-title');
- $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
$this->out->elementStart('span', 'vcard author');
$this->out->elementStart('a', array('title' => ($profile->fullname) ?
$profile->fullname :
$profile->nickname,
'href' => $profile->profileurl,
'class' => 'url'));
- $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
+ $avatarUrl = $profile->avatarUrl(AVATAR_MINI_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/peopletaglist.php b/lib/peopletaglist.php
index 2d0797f856..5c027d7586 100644
--- a/lib/peopletaglist.php
+++ b/lib/peopletaglist.php
@@ -283,11 +283,9 @@ class PeopletagListItem extends Widget
function showAvatar($size=AVATAR_STREAM_SIZE)
{
- $avatar = $this->profile->getAvatar($size);
+ $avatarUrl = $this->profile->avatarUrl($size);
- $this->out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage($size),
+ $this->out->element('img', array('src' => $avatarUrl,
'class' => 'avatar photo',
'width' => $size,
'height' => $size,
diff --git a/lib/profilelist.php b/lib/profilelist.php
index 313cf76073..085690b9f7 100644
--- a/lib/profilelist.php
+++ b/lib/profilelist.php
@@ -199,10 +199,10 @@ class ProfileListItem extends Widget
function showAvatar()
{
- $avatar = $this->profile->getAvatar(AVATAR_STREAM_SIZE);
+ $avatarUrl = $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
$aAttrs = $this->linkAttributes();
$this->out->elementStart('a', $aAttrs);
- $this->out->element('img', array('src' => (!empty($avatar)) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_STREAM_SIZE),
+ $this->out->element('img', array('src' => $avatarUrl,
'class' => 'photo avatar',
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
diff --git a/lib/profileminilist.php b/lib/profileminilist.php
index 7418c89232..049754f721 100644
--- a/lib/profileminilist.php
+++ b/lib/profileminilist.php
@@ -79,8 +79,8 @@ class ProfileMiniListItem extends ProfileListItem
if (Event::handle('StartProfileListItemAvatar', array($this))) {
$aAttrs = $this->linkAttributes();
$this->out->elementStart('a', $aAttrs);
- $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
+ $avatarUrl = $this->profile->avatarUrl(AVATAR_MINI_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/profilesection.php b/lib/profilesection.php
index a9482cd634..676fcd3540 100644
--- a/lib/profilesection.php
+++ b/lib/profilesection.php
@@ -86,8 +86,8 @@ class ProfileSection extends Section
'rel' => 'contact member',
'class' => 'url'));
$this->out->text(' ');
- $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() : Avatar::defaultImage(AVATAR_MINI_SIZE)),
+ $avatarUrl = $profile->avatarUrl(AVATAR_MINI_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/router.php b/lib/router.php
index e6a45a5956..0180594e26 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -875,10 +875,13 @@ class Router
array('action' => 'showfavorites',
'nickname' => $nickname));
+ $m->connect('avatar',
+ array('action' => 'avatarbynickname',
+ 'nickname' => $nickname));
$m->connect('avatar/:size',
array('action' => 'avatarbynickname',
'nickname' => $nickname),
- array('size' => '(original|96|48|24)'));
+ array('size' => '(|original|\d+)'));
$m->connect('tag/:tag/rss',
array('action' => 'userrss',
@@ -1047,9 +1050,12 @@ class Router
array('action' => 'showfavorites'),
array('nickname' => Nickname::DISPLAY_FMT));
+ $m->connect(':nickname/avatar',
+ array('action' => 'avatarbynickname'),
+ array('nickname' => Nickname::DISPLAY_FMT));
$m->connect(':nickname/avatar/:size',
array('action' => 'avatarbynickname'),
- array('size' => '(original|96|48|24)',
+ array('size' => '(|original|\d+)',
'nickname' => Nickname::DISPLAY_FMT));
$m->connect(':nickname/tag/:tag/rss',
diff --git a/lib/togglepeopletag.php b/lib/togglepeopletag.php
index 156ce30af5..fdbf2b7cdb 100644
--- a/lib/togglepeopletag.php
+++ b/lib/togglepeopletag.php
@@ -306,9 +306,8 @@ class TaggedProfileItem extends Widget
$this->out->elementStart('a', array('class' => 'url',
'href' => $this->profile->profileurl,
'title' => $this->profile->getBestName()));
- $avatar = $this->profile->getAvatar(AVATAR_MINI_SIZE);
- $this->out->element('img', array('src' => (($avatar) ? $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_MINI_SIZE)),
+ $avatarUrl = $this->profile->avatarUrl(AVATAR_MINI_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_MINI_SIZE,
'height' => AVATAR_MINI_SIZE,
'class' => 'avatar photo',
diff --git a/lib/util.php b/lib/util.php
index 2e9ba29ff3..abdd5c9207 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -2004,7 +2004,11 @@ function common_user_property($property)
return $profile->$property;
break;
case 'avatar':
- return $profile->getAvatar(AVATAR_STREAM_SIZE);
+ try {
+ return $profile->getAvatar(AVATAR_STREAM_SIZE);
+ } catch (Exception $e) {
+ return null;
+ }
break;
case 'bestname':
return $profile->getBestName();
diff --git a/plugins/Autocomplete/actions/autocomplete.php b/plugins/Autocomplete/actions/autocomplete.php
index 2e66fec93d..a82379c757 100644
--- a/plugins/Autocomplete/actions/autocomplete.php
+++ b/plugins/Autocomplete/actions/autocomplete.php
@@ -141,33 +141,27 @@ class AutocompleteAction extends Action
$results = array();
foreach($this->users as $user){
$profile = $user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
- // sigh.... encapsulate this upstream!
- if ($avatar) {
- $avatar = $avatar->displayUrl();
- } else {
- $avatar = Avatar::defaultImage(AVATAR_MINI_SIZE);
- }
+ $avatarUrl = $profile->avatarUrl(AVATAR_MINI_SIZE);
$results[] = array(
'value' => '@'.$profile->nickname,
'nickname' => $profile->nickname,
'label'=> $profile->getFancyName(),
- 'avatar' => $avatar,
+ 'avatar' => $avatarUrl,
'type' => 'user'
);
}
foreach($this->groups as $group){
// sigh.... encapsulate this upstream!
if ($group->mini_logo) {
- $avatar = $group->mini_logo;
+ $avatarUrl = $group->mini_logo;
} else {
- $avatar = User_group::defaultLogo(AVATAR_MINI_SIZE);
+ $avatarUrl = User_group::defaultLogo(AVATAR_MINI_SIZE);
}
$results[] = array(
'value' => '!'.$group->nickname,
'nickname' => $group->nickname,
'label'=> $group->getFancyName(),
- 'avatar' => $avatar,
+ 'avatar' => $avatarUrl,
'type' => 'group');
}
print json_encode($results);
diff --git a/plugins/Bookmark/actions/apitimelinebookmarks.php b/plugins/Bookmark/actions/apitimelinebookmarks.php
index 58aac5d21c..4cc0dcde7f 100644
--- a/plugins/Bookmark/actions/apitimelinebookmarks.php
+++ b/plugins/Bookmark/actions/apitimelinebookmarks.php
@@ -97,7 +97,6 @@ class ApiTimelineBookmarksAction extends ApiBareAuthAction
function showTimeline()
{
$profile = $this->user->getProfile();
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
$sitename = common_config('site', 'name');
$title = sprintf(
@@ -120,15 +119,10 @@ class ApiTimelineBookmarksAction extends ApiBareAuthAction
$profile->getBestName(),
$this->user->nickname
);
- $logo = !empty($avatar)
- ? $avatar->displayUrl()
- : Avatar::defaultImage(AVATAR_PROFILE_SIZE);
-
- $link = common_local_url(
- 'bookmarks',
- array('nickname' => $this->user->nickname)
- );
+ $logo = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
+ $link = common_local_url('bookmarks',
+ array('nickname' => $this->user->nickname));
$self = $this->getSelfUri();
switch($this->format) {
diff --git a/plugins/EmailSummary/lib/useremailsummaryhandler.php b/plugins/EmailSummary/lib/useremailsummaryhandler.php
index 46275c39c4..01f6ca8264 100644
--- a/plugins/EmailSummary/lib/useremailsummaryhandler.php
+++ b/plugins/EmailSummary/lib/useremailsummaryhandler.php
@@ -151,7 +151,7 @@ class UserEmailSummaryHandler extends QueueHandler
continue;
}
- $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
+ $avatarUrl = $profile->avatarUrl(AVATAR_STREAM_SIZE);
$out->elementStart('tr');
$out->elementStart('td', array('width' => AVATAR_STREAM_SIZE,
@@ -159,9 +159,7 @@ class UserEmailSummaryHandler extends QueueHandler
'align' => 'left',
'valign' => 'top',
'style' => 'border-bottom: 1px dotted #C5CEE3; padding: 10px 6px 10px 6px;'));
- $out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_STREAM_SIZE),
+ $out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
'alt' => $profile->getBestName()));
diff --git a/plugins/GNUsocialProfileExtensions/actions/bio.php b/plugins/GNUsocialProfileExtensions/actions/bio.php
index 32460de426..269389e07d 100644
--- a/plugins/GNUsocialProfileExtensions/actions/bio.php
+++ b/plugins/GNUsocialProfileExtensions/actions/bio.php
@@ -46,7 +46,6 @@ class BioAction extends Action
$this->profile = Profile::getKV('nickname', $args[1]['nickname']);
//die(print_r($this->profile));
gnusocial_profile_merge($this->profile);
- $this->avatar = $this->profile->getAvatar(96);
return true;
diff --git a/plugins/GroupPrivateMessage/actions/showgroupmessage.php b/plugins/GroupPrivateMessage/actions/showgroupmessage.php
index 8b99ece275..4c2e7a71f6 100644
--- a/plugins/GroupPrivateMessage/actions/showgroupmessage.php
+++ b/plugins/GroupPrivateMessage/actions/showgroupmessage.php
@@ -174,9 +174,12 @@ class ShowgroupmessageAction extends Action
*/
function etag()
{
- $avatar = $this->sender->getAvatar(AVATAR_STREAM_SIZE);
-
- $avtime = ($avatar) ? strtotime($avatar->modified) : 0;
+ try {
+ $avatar = $this->sender->getAvatar(AVATAR_STREAM_SIZE);
+ $avtime = strtotime($avatar->modified);
+ } catch (Exception $e) {
+ $avtime = 0;
+ }
return 'W/"' . implode(':', array($this->arg('action'),
common_user_cache_hash(),
diff --git a/plugins/GroupPrivateMessage/lib/groupmessagelistitem.php b/plugins/GroupPrivateMessage/lib/groupmessagelistitem.php
index cb9c6a5992..741d621c32 100644
--- a/plugins/GroupPrivateMessage/lib/groupmessagelistitem.php
+++ b/plugins/GroupPrivateMessage/lib/groupmessagelistitem.php
@@ -78,10 +78,8 @@ class GroupMessageListItem extends Widget
$this->out->elementStart('a',
array('href' => $sender->profileurl,
'class' => 'url'));
- $avatar = $sender->getAvatar(AVATAR_STREAM_SIZE);
- $this->out->element('img', array('src' => ($avatar) ?
- $avatar->displayUrl() :
- Avatar::defaultImage(AVATAR_STREAM_SIZE),
+ $avatarUrl = $sender->avatarUrl(AVATAR_STREAM_SIZE);
+ $this->out->element('img', array('src' => $avatarUrl,
'width' => AVATAR_STREAM_SIZE,
'height' => AVATAR_STREAM_SIZE,
'class' => 'photo avatar',
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index f27c3658b1..2eeaac98de 100644
--- a/plugins/OStatus/actions/ostatussub.php
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -142,8 +142,7 @@ class OStatusSubAction extends Action
$ok = true;
}
- $avatar = $profile->getAvatar(AVATAR_PROFILE_SIZE);
- $avatarUrl = $avatar ? $avatar->displayUrl() : false;
+ $avatar = $profile->avatarUrl(AVATAR_PROFILE_SIZE);
$this->showEntity($profile,
$profile->profileurl,
@@ -159,10 +158,6 @@ class OStatusSubAction extends Action
$homepage = $entity->homepage;
$location = $entity->location;
- if (!$avatar) {
- $avatar = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
- }
-
$this->elementStart('div', 'entity_profile vcard');
$this->element('img', array('src' => $avatar,
'class' => 'photo avatar entity_depiction',
diff --git a/plugins/QnA/actions/qnashowanswer.php b/plugins/QnA/actions/qnashowanswer.php
index 95a3c595df..ab432d97d9 100644
--- a/plugins/QnA/actions/qnashowanswer.php
+++ b/plugins/QnA/actions/qnashowanswer.php
@@ -96,7 +96,11 @@ class QnashowanswerAction extends ShownoticeAction
throw new ServerException(_m('User without a profile.'));
}
- $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ try {
+ $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ } catch (Exception $e) {
+ $this->avatar = null;
+ }
return true;
}
diff --git a/plugins/QnA/actions/qnashowquestion.php b/plugins/QnA/actions/qnashowquestion.php
index f030efadb2..cc8f98448a 100644
--- a/plugins/QnA/actions/qnashowquestion.php
+++ b/plugins/QnA/actions/qnashowquestion.php
@@ -90,7 +90,11 @@ class QnashowquestionAction extends ShownoticeAction
throw new ServerException(_m('User without a profile.'));
}
- $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ try {
+ $this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
+ } catch (Exception $e) {
+ $this->avatar = null;
+ }
return true;
}
diff --git a/plugins/SubMirror/forms/editmirror.php b/plugins/SubMirror/forms/editmirror.php
index 1fc13e8212..704998057d 100644
--- a/plugins/SubMirror/forms/editmirror.php
+++ b/plugins/SubMirror/forms/editmirror.php
@@ -64,7 +64,7 @@ class EditMirrorForm extends Form
$this->out->hidden('profile', $this->profile->id);
$this->out->elementStart('div', array('style' => 'float: left; width: 80px;'));
- $img = $this->getAvatar($this->profile);
+ $img = $this->profile->avatarUrl(AVATAR_STREAM_SIZE);
$feed = $this->getFeed($this->profile);
$this->out->elementStart('a', array('href' => $this->profile->profileurl));
$this->out->element('img', array('src' => $img, 'style' => 'float: left'));
@@ -130,16 +130,6 @@ class EditMirrorForm extends Form
$this->out->elementEnd('fieldset');
}
- private function getAvatar($profile)
- {
- $avatar = $this->profile->getAvatar(48);
- if ($avatar) {
- return $avatar->displayUrl();
- } else {
- return Avatar::defaultImage(48);
- }
- }
-
private function getFeed($profile)
{
// Ok this is a bit of a hack. ;)
diff --git a/plugins/TwitterBridge/lib/twitterimport.php b/plugins/TwitterBridge/lib/twitterimport.php
index cdfb8f8316..780fa8f926 100644
--- a/plugins/TwitterBridge/lib/twitterimport.php
+++ b/plugins/TwitterBridge/lib/twitterimport.php
@@ -341,7 +341,14 @@ class TwitterImport
$newname = 'Twitter_' . $twitter_user->id . '_' . basename($twitter_user->profile_image_url);
- $oldname = $profile->getAvatar(48)->filename;
+ try {
+ $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
+ $oldname = $avatar->filename;
+ unset($avatar);
+ } catch (Exception $e) {
+ $oldname = null;
+ }
+
if ($newname != $oldname) {
common_debug($this->name() . ' - Avatar for Twitter user ' .
@@ -351,7 +358,7 @@ class TwitterImport
$this->updateAvatars($twitter_user, $profile);
}
- if ($this->missingAvatarFile($profile)) {
+ if (Avatar::hasOriginal($profile)) {
common_debug($this->name() . ' - Twitter user ' .
$profile->nickname .
' is missing one or more local avatars.');
@@ -382,17 +389,6 @@ class TwitterImport
}
}
- function missingAvatarFile($profile) {
- foreach (array(24, 48, 73) as $size) {
- $filename = $profile->getAvatar($size)->filename;
- $avatarpath = Avatar::path($filename);
- if (file_exists($avatarpath) == FALSE) {
- return true;
- }
- }
- return false;
- }
-
function getMediatype($ext)
{
$mediatype = null;
@@ -447,13 +443,7 @@ class TwitterImport
return;
}
- $sizes = array('mini' => 24, 'normal' => 48, 'bigger' => 73);
- $avatar = $profile->getAvatar($sizes[$size]);
-
- // Delete the avatar, if present
- if ($avatar) {
- $avatar->delete();
- }
+ Avatar::deleteFromProfile($profile);
$this->newAvatar($profile->id, $size, $mediatype, $filename);
}