class AvatarAction extends SettingsAction {
- function show_form($msg=NULL, $success=false) {
- common_show_header(_t('Avatar'));
+ function show_top($arr) {
+ $msg = $arr[0];
+ $success = $arr[1];
+ if ($msg) {
+ $this->message($msg, $success);
+ } else {
+ common_element('div', 'instructions',
+ _t('Upload a new "avatar" (user image) here. ' .
+ 'You can\'t edit the picture after you upload it, so ' .
+ 'make sure it\'s more or less square. ' .
+ 'It must be under the site license, also. ' .
+ 'Use a picture that belongs to you and that you ' .
+ 'want to share.'));
+ }
$this->settings_menu();
- $this->message($msg, $success);
+ }
+
+ function show_form($msg=NULL, $success=false) {
+ common_show_header(_t('Avatar'), NULL, array($msg, $success), array($this, 'show_top'));
$user = common_current_user();
$profile = $user->getProfile();
- $original = $profile->getOriginal();
+ $original = $profile->getOriginalAvatar();
if ($original) {
common_element('img', array('src' => $original->url,
common_element('input', array('name' => 'avatarfile',
'type' => 'file',
'id' => 'avatarfile'));
- common_element('input', array('name' => 'submit',
- 'type' => 'submit',
- 'id' => 'submit',
- 'value' =>_t('Upload')));
+ common_submit('submit', _t('Upload'));
common_element_end('form');
common_show_footer();
}
}
$user = common_current_user();
-
- $filename = common_avatar_filename($user, image_type_to_extension($info[2]));
- $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) {
- $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') ? ".jpg" : ".png";
-
- $filename = common_avatar_filename($user, $ext, $size);
-
- 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']);
}
}