From 56021d95721c06b618dac6272e58d22a3e87037f Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Thu, 5 Jun 2008 15:37:08 -0400 Subject: move avatar scaling and saving to Avatar and Profile Extracted the code for setting a new original avatar to the Profile class, and moved some of it to Avatar, too. This makes it easier to have the same functionality whether an avatar is set using the profile settings (for our users), or on a remote subscription. Necessitated changing the filenaming function to just take an ID. darcs-hash:20080605193708-84dde-a441cc0474951ce7f1a1da9310b5145c0b7c3070.gz --- actions/avatar.php | 111 +++----------------------------------- actions/finishremotesubscribe.php | 8 ++- actions/userauthorization.php | 44 ++------------- 3 files changed, 16 insertions(+), 147 deletions(-) (limited to 'actions') diff --git a/actions/avatar.php b/actions/avatar.php index 9c736cd3b..ffd003f74 100644 --- a/actions/avatar.php +++ b/actions/avatar.php @@ -104,114 +104,15 @@ class AvatarAction extends SettingsAction { } $user = common_current_user(); - - $filename = common_avatar_filename($user, image_type_to_extension($info[2]), NULL, common_timestamp()); - $filepath = common_avatar_path($filename); - - if (!move_uploaded_file($_FILES['avatarfile']['tmp_name'], $filepath)) { - @unlink($_FILES['avatarfile']['tmp_name']); - $this->show_form(_t('System error uploading file.')); - return; - } - - $avatar = DB_DataObject::factory('avatar'); - - $avatar->profile_id = $user->id; - $avatar->width = $info[0]; - $avatar->height = $info[1]; - $avatar->mediatype = image_type_to_mime_type($info[2]); - $avatar->filename = $filename; - $avatar->original = true; - $avatar->url = common_avatar_url($filename); - $avatar->created = DB_DataObject_Cast::dateTime(); # current time - - foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { - # We don't need a scaled one if the original is already of that size! - if ($avatar->width != $size && $avatar->height != $size) { - $scaled[] = $this->scale_avatar($user, $avatar, $size); - } - } - - # XXX: start a transaction here - - if (!$this->delete_old_avatars($user)) { - @unlink($filepath); - common_server_error(_t('Error deleting old avatars.')); - return; - } - if (!$avatar->insert()) { - @unlink($filepath); - common_server_error(_t('Error inserting avatar.')); - return; - } - - foreach ($scaled as $s) { - if (!$s->insert()) { - common_server_error(_t('Error inserting scaled avatar.')); - return; - } - } - - # XXX: end transaction here - - $this->show_form(_t('Avatar updated.'), true); - } - - function scale_avatar($user, $avatar, $size) { - $image_s = imagecreatetruecolor($size, $size); - $image_a = $this->avatar_to_image($avatar); - - $square = min($avatar->width, $avatar->height); - - imagecopyresampled($image_s, $image_a, 0, 0, 0, 0, - $size, $size, $square, $square); - - $ext = ($avatar->mediattype == 'image/jpeg') ? ".jpeg" : ".png"; - - $filename = common_avatar_filename($user, $ext, $size, common_timestamp()); - - if ($avatar->mediatype == 'image/jpeg') { - imagejpeg($image_s, common_avatar_path($filename)); - } else { - imagepng($image_s, common_avatar_path($filename)); - } - - $scaled = DB_DataObject::factory('avatar'); - $scaled->profile_id = $avatar->profile_id; - $scaled->width = $size; - $scaled->height = $size; - $scaled->original = false; - $scaled->mediatype = ($avatar->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png'; - $scaled->filename = $filename; - $scaled->url = common_avatar_url($filename); - $scaled->created = DB_DataObject_Cast::dateTime(); # current time - - return $scaled; - } - - function avatar_to_image($avatar) { - $filepath = common_avatar_path($avatar->filename); - if ($avatar->mediatype == 'image/gif') { - return imagecreatefromgif($filepath); - } else if ($avatar->mediatype == 'image/jpeg') { - return imagecreatefromjpeg($filepath); - } else if ($avatar->mediatype == 'image/png') { - return imagecreatefrompng($filepath); + $profile = $user->getProfile(); + + if ($profile->setOriginal($_FILES['avatarfile']['tmp_name'])) { + $this->show_form(_t('Avatar updated.'), true); } else { - common_server_error(_t('Unsupported image type:') . $avatar->mediatype); - return NULL; + $this->show_form(_t('Failed updating avatar.')); } - } - function delete_old_avatars($user) { - $avatar = DB_DataObject::factory('avatar'); - $avatar->profile_id = $user->id; - $avatar->find(); - while ($avatar->fetch()) { - unlink(common_avatar_path($avatar->filename)); - $avatar->delete(); - } - return true; + @unlink($_FILES['avatarfile']['tmp_name']); } } diff --git a/actions/finishremotesubscribe.php b/actions/finishremotesubscribe.php index 41bc91afd..fa9aa539f 100644 --- a/actions/finishremotesubscribe.php +++ b/actions/finishremotesubscribe.php @@ -140,7 +140,7 @@ class FinishremotesubscribeAction extends Action { } if ($avatar_url) { - $this->add_avatar($avatar_url); + $this->add_avatar($profile, $avatar_url); } $remote->postnoticeurl = $omb[OMB_ENDPOINT_POSTNOTICE]; @@ -175,6 +175,12 @@ class FinishremotesubscribeAction extends Action { $user->nickname))); } + function add_avatar($profile, $url) { + $temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar'); + copy($url, $temp_filename); + return $profile->setOriginal($temp_filename); + } + function access_token($omb) { $con = omb_oauth_consumer(); diff --git a/actions/userauthorization.php b/actions/userauthorization.php index 94d92ea77..87040adad 100644 --- a/actions/userauthorization.php +++ b/actions/userauthorization.php @@ -257,7 +257,7 @@ class UserauthorizationAction extends Action { } if ($avatar_url) { - $this->add_avatar($profile->id, $avatar_url); + $this->add_avatar($profile, $avatar_url); } $user = common_current_user(); @@ -278,47 +278,9 @@ class UserauthorizationAction extends Action { } function add_avatar($profile, $url) { - $temp_filename = tempnam(sys_get_temp_dir(), 'ombavatar'); + $temp_filename = tempnam(sys_get_temp_dir(), 'listenee_avatar'); copy($url, $temp_filename); - $info = @getimagesize($temp_filename); - $filename = common_avatar_filename($profile, image_type_to_extension($info[2]), NULL, common_timestamp()); - $filepath = common_avatar_path($filename); - copy($temp_filename, $filename); - - $avatar = DB_DataObject::factory('avatar'); - - $avatar->profile_id = $profile->id; - $avatar->width = $info[0]; - $avatar->height = $info[1]; - $avatar->mediatype = image_type_to_mime_type($info[2]); - $avatar->filename = $filename; - $avatar->original = true; - $avatar->url = common_avatar_url($filename); - $avatar->created = DB_DataObject_Cast::dateTime(); # current time - - foreach (array(AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) { - $scaled[] = $this->scale_avatar($user, $avatar, $size); - } - - # XXX: start a transaction here - - if (!$this->delete_old_avatars($user)) { - @unlink($filepath); - common_server_error(_t('Error deleting old avatars.')); - return; - } - if (!$avatar->insert()) { - @unlink($filepath); - common_server_error(_t('Error inserting avatar.')); - return; - } - - foreach ($scaled as $s) { - if (!$s->insert()) { - common_server_error(_t('Error inserting scaled avatar.')); - return; - } - } + return $profile->setOriginal($temp_filename); } function show_accept_message($tok) { -- cgit v1.2.3-54-g00ecf