X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FAvatar.php;h=6a66228a0e417fb86ca156dd230128607f482258;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=3b3317b3ef5ed9f58e066a6e95f43aac9392f696;hpb=0590f2975e6c5b26bbe6121da5c49890e035721e;p=quix0rs-gnu-social.git diff --git a/classes/Avatar.php b/classes/Avatar.php index 3b3317b3ef..6a66228a0e 100644 --- a/classes/Avatar.php +++ b/classes/Avatar.php @@ -33,13 +33,13 @@ class Avatar extends Managed_DataObject 'height' => array('type' => 'int', 'not null' => true, 'description' => 'image height'), 'mediatype' => array('type' => 'varchar', 'length' => 32, 'not null' => true, 'description' => 'file type'), 'filename' => array('type' => 'varchar', 'length' => 191, 'description' => 'local filename, if local'), - 'url' => array('type' => 'varchar', 'length' => 191, 'description' => 'avatar location'), + 'url' => array('type' => 'text', 'description' => 'avatar location, not indexed - do not use in WHERE statement'), 'created' => array('type' => 'datetime', 'not null' => true, 'description' => 'date this record was created'), 'modified' => array('type' => 'timestamp', 'not null' => true, 'description' => 'date this record was modified'), ), 'primary key' => array('profile_id', 'width', 'height'), 'unique keys' => array( - 'avatar_url_key' => array('url'), +// 'avatar_filename_key' => array('filename'), ), 'foreign keys' => array( 'avatar_profile_id_fkey' => array('profile', array('profile_id' => 'id')), @@ -70,10 +70,14 @@ class Avatar extends Managed_DataObject public static function deleteFromProfile(Profile $target, $original=true) { try { $avatars = self::getProfileAvatars($target); + foreach ($avatars as $avatar) { + assert($avatar instanceof Avatar); + if ($avatar->original && !$original) { continue; } + $avatar->delete(); } } catch (NoAvatarException $e) { @@ -97,6 +101,7 @@ class Avatar extends Managed_DataObject } $size = "{$width}x{$height}"; + if (!isset(self::$_avatars[$target->id])) { self::$_avatars[$target->id] = array(); } elseif (isset(self::$_avatars[$target->id][$size])){ @@ -104,6 +109,7 @@ class Avatar extends Managed_DataObject } $avatar = null; + if (Event::handle('StartProfileGetAvatar', array($target, $width, &$avatar))) { $avatar = self::pkeyGet( array( @@ -112,6 +118,7 @@ class Avatar extends Managed_DataObject 'height' => $height, ) ); + Event::handle('EndProfileGetAvatar', array($target, $width, &$avatar)); } @@ -184,7 +191,7 @@ class Avatar extends Managed_DataObject } if ($path[0] != '/') { - $path = '/'.$path; + $path = '/' . $path; } $server = common_config('avatar', 'server'); @@ -223,6 +230,12 @@ class Avatar extends Managed_DataObject try { return self::byProfile($target, $width, $height)->displayUrl(); } catch (Exception $e) { + common_debug(sprintf('target=>id=%s,width=%s,height=%s,message=%s', + $target->id, + $width, + $height, + $e->getMessage() + )); return self::defaultImage($width); } } @@ -232,7 +245,7 @@ class Avatar extends Managed_DataObject static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile', AVATAR_STREAM_SIZE => 'stream', AVATAR_MINI_SIZE => 'mini'); - return Theme::path('default-avatar-'.$sizenames[$size].'.png'); + return Theme::path('default-avatar-' . $sizenames[$size] . '.png'); } static function newSize(Profile $target, $width) { @@ -241,16 +254,21 @@ class Avatar extends Managed_DataObject // TRANS: An error message when avatar size is unreasonable throw new Exception(_m('Avatar size too large')); } + // So far we only have square avatars and I don't have time to + // rewrite support for non-square ones right now ;) + $height = $width; $original = Avatar::getUploaded($target); - $imagefile = new ImageFile($target->id, Avatar::path($original->filename)); - $filename = $imagefile->resize($width); + $imagefile = new ImageFile(null, Avatar::path($original->filename)); + $filename = Avatar::filename($target->getID(), image_type_to_extension($imagefile->preferredType()), + $width, common_timestamp()); + $imagefile->resizeTo(Avatar::path($filename), array('width'=>$width, 'height'=>$height)); $scaled = clone($original); $scaled->original = false; $scaled->width = $width; - $scaled->height = $width; + $scaled->height = $height; $scaled->url = Avatar::url($filename); $scaled->filename = $filename; $scaled->created = common_sql_now();