From b0dfc70a54e5e184023ed982dfaf5439041e9708 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Tue, 1 Oct 2013 11:37:59 +0200 Subject: [PATCH] Properly unlink all old avatars when deleting/uploading a new We're also now using $config['image']['jpegquality'] to determine the quality setting for resized images. To set Avatar max size, adjust $config['avatar']['maxsize'] The getAvatar call now throws exceptions too. Related changes applied. Now let's move Profile->avatarUrl to the Avatar class! --- actions/allrss.php | 3 +- actions/apitimelinefavorites.php | 12 +-- actions/apitimelinefriends.php | 13 +-- actions/apitimelinehome.php | 13 +-- actions/apitimelinementions.php | 9 +- actions/apiuserprofileimage.php | 7 +- actions/avatarbynickname.php | 48 +++------ actions/avatarsettings.php | 11 ++- actions/foaf.php | 6 +- actions/repliesrss.php | 9 +- actions/shownotice.php | 11 ++- actions/tagprofile.php | 4 +- actions/userrss.php | 10 +- classes/Avatar.php | 44 +++++++-- classes/Managed_DataObject.php | 2 +- classes/Memcached_DataObject.php | 1 - classes/Profile.php | 98 +++++++------------ lib/accountprofileblock.php | 8 +- lib/activityobject.php | 18 +--- lib/apiaction.php | 15 +-- lib/atomusernoticefeed.php | 4 +- lib/default.php | 5 +- lib/defaultprofileblock.php | 10 +- lib/imagefile.php | 2 +- lib/jsonsearchresultslist.php | 5 +- lib/messagelistitem.php | 6 +- lib/noresultexception.php | 20 +--- lib/noticelistitem.php | 6 +- lib/noticesection.php | 4 +- lib/peopletaglist.php | 6 +- lib/profilelist.php | 4 +- lib/profileminilist.php | 4 +- lib/profilesection.php | 4 +- lib/router.php | 10 +- lib/togglepeopletag.php | 5 +- lib/util.php | 6 +- plugins/Autocomplete/actions/autocomplete.php | 16 +-- .../Bookmark/actions/apitimelinebookmarks.php | 12 +-- .../lib/useremailsummaryhandler.php | 6 +- .../actions/bio.php | 1 - .../actions/showgroupmessage.php | 9 +- .../lib/groupmessagelistitem.php | 6 +- plugins/OStatus/actions/ostatussub.php | 7 +- plugins/QnA/actions/qnashowanswer.php | 6 +- plugins/QnA/actions/qnashowquestion.php | 6 +- plugins/SubMirror/forms/editmirror.php | 12 +-- plugins/TwitterBridge/lib/twitterimport.php | 30 ++---- 47 files changed, 219 insertions(+), 335 deletions(-) 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); }