summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/avatar.php111
-rw-r--r--actions/finishremotesubscribe.php8
-rw-r--r--actions/userauthorization.php44
-rw-r--r--classes/Avatar.php68
-rw-r--r--classes/Profile.php73
-rw-r--r--lib/util.php6
6 files changed, 151 insertions, 159 deletions
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) {
diff --git a/classes/Avatar.php b/classes/Avatar.php
index 2e0e1f3fb..ca2e0cbce 100644
--- a/classes/Avatar.php
+++ b/classes/Avatar.php
@@ -4,18 +4,18 @@
*/
require_once 'DB/DataObject.php';
-class Avatar extends DB_DataObject
+class Avatar extends DB_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
public $__table = 'avatar'; // table name
public $profile_id; // int(4) primary_key not_null
- public $original; // tinyint(1)
+ public $original; // tinyint(1)
public $width; // int(4) primary_key not_null
public $height; // int(4) primary_key not_null
public $mediatype; // varchar(32) not_null
- public $filename; // varchar(255)
+ public $filename; // varchar(255)
public $url; // varchar(255) unique_key
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@@ -25,4 +25,66 @@ class Avatar extends DB_DataObject
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
+
+ # We clean up the file, too
+
+ function delete() {
+ $filename = $this->filename;
+ if (parent::delete()) {
+ unlink(common_avatar_path($filename));
+ }
+ }
+
+ # Create and save scaled version of this avatar
+ # XXX: maybe break into different methods
+
+ function scale($size) {
+
+ $image_s = imagecreatetruecolor($size, $size);
+ $image_a = $this->to_image();
+
+ $square = min($this->width, $this->height);
+
+ imagecopyresampled($image_s, $image_a, 0, 0, 0, 0,
+ $size, $size, $square, $square);
+
+ $ext = ($this->mediattype == 'image/jpeg') ? ".jpeg" : ".png";
+
+ $filename = common_avatar_filename($this->profile_id, $ext, $size, common_timestamp());
+
+ if ($this->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 = $this->profile_id;
+ $scaled->width = $size;
+ $scaled->height = $size;
+ $scaled->original = false;
+ $scaled->mediatype = ($this->mediattype == 'image/jpeg') ? 'image/jpeg' : 'image/png';
+ $scaled->filename = $filename;
+ $scaled->url = common_avatar_url($filename);
+ $scaled->created = DB_DataObject_Cast::dateTime(); # current time
+
+ if ($scaled->insert()) {
+ return $scaled;
+ } else {
+ return NULL;
+ }
+ }
+
+ function to_image() {
+ $filepath = common_avatar_path($this->filename);
+ if ($this->mediatype == 'image/gif') {
+ return imagecreatefromgif($filepath);
+ } else if ($this->mediatype == 'image/jpeg') {
+ return imagecreatefromjpeg($filepath);
+ } else if ($this->mediatype == 'image/png') {
+ return imagecreatefrompng($filepath);
+ } else {
+ return NULL;
+ }
+ }
}
diff --git a/classes/Profile.php b/classes/Profile.php
index eb29d63a2..ff63bc79e 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -24,7 +24,7 @@ if (!defined('LACONICA')) { exit(1); }
*/
require_once 'DB/DataObject.php';
-class Profile extends DB_DataObject
+class Profile extends DB_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
@@ -32,11 +32,11 @@ class Profile extends DB_DataObject
public $__table = 'profile'; // table name
public $id; // int(4) primary_key not_null
public $nickname; // varchar(64) not_null
- public $fullname; // varchar(255)
- public $profileurl; // varchar(255)
- public $homepage; // varchar(255)
- public $bio; // varchar(140)
- public $location; // varchar(255)
+ public $fullname; // varchar(255)
+ public $profileurl; // varchar(255)
+ public $homepage; // varchar(255)
+ public $bio; // varchar(140)
+ public $location; // varchar(255)
public $created; // datetime() not_null
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
@@ -72,4 +72,65 @@ class Profile extends DB_DataObject
return NULL;
}
}
+
+ static function setOriginal($source) {
+
+ $info = @getimagesize($source);
+
+ if (!$info) {
+ return NULL;
+ }
+
+ $filename = common_avatar_filename($this,
+ image_type_to_extension($info[2]),
+ NULL, common_timestamp());
+ $filepath = common_avatar_path($filename);
+
+ copy($source, $filepath);
+
+ $avatar = new Avatar();
+
+ $avatar->profile_id = $this->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
+
+ # XXX: start a transaction here
+
+ if (!$this->delete_avatars()) {
+ @unlink($filepath);
+ return NULL;
+ }
+
+ if (!$avatar->insert()) {
+ @unlink($filepath);
+ return NULL;
+ }
+
+ foreach (array(AVATAR_PROFILE_SIZE, AVATAR_STREAM_SIZE, AVATAR_MINI_SIZE) as $size) {
+ # We don't do a scaled one if original is our scaled size
+ if (!($avatar->width == $size && $avatar->height == $size)) {
+ $s = $avatar->scale($size);
+ if (!$s) {
+ return NULL;
+ }
+ }
+ }
+
+ return $avatar;
+ }
+
+ function delete_avatars() {
+ $avatar = DB_DataObject::factory('avatar');
+ $avatar->profile_id = $this->id;
+ $avatar->find();
+ while ($avatar->fetch()) {
+ $avatar->delete();
+ }
+ return true;
+ }
}
diff --git a/lib/util.php b/lib/util.php
index 771a4880c..298c5c5de 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -403,13 +403,13 @@ function common_at_link($sender_id, $nickname) {
// where should the avatar go for this user?
-function common_avatar_filename($user, $extension, $size=NULL, $extra=NULL) {
+function common_avatar_filename($id, $extension, $size=NULL, $extra=NULL) {
global $config;
if ($size) {
- return $user->id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
+ return $id . '-' . $size . (($extra) ? ('-' . $extra) : '') . $extension;
} else {
- return $user->id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
+ return $id . '-original' . (($extra) ? ('-' . $extra) : '') . $extension;
}
}