From 1e9077f5291b06dae8099dc33af9402c11e9c6aa Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Fri, 10 Jun 2016 21:02:50 +0000 Subject: [PATCH] Set avatar where available --- plugins/Linkback/lib/util.php | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/plugins/Linkback/lib/util.php b/plugins/Linkback/lib/util.php index 62b80ec19f..74dedf8840 100644 --- a/plugins/Linkback/lib/util.php +++ b/plugins/Linkback/lib/util.php @@ -280,6 +280,39 @@ function linkback_notice($source, $notice_or_user, $entry, $author, $mf2) { return array($content, $options); } +function linkback_avatar($profile, $url) { + // Ripped from OStatus plugin for now + $temp_filename = tempnam(sys_get_temp_dir(), 'linback_avatar'); + try { + $imgData = HTTPClient::quickGet($url); + // Make sure it's at least an image file. ImageFile can do the rest. + if (false === getimagesizefromstring($imgData)) { + return false; + } + file_put_contents($temp_filename, $imgData); + unset($imgData); // No need to carry this in memory. + + $imagefile = new ImageFile(null, $temp_filename); + $filename = Avatar::filename($profile->id, + image_type_to_extension($imagefile->type), + null, + common_timestamp()); + rename($temp_filename, Avatar::path($filename)); + } catch (Exception $e) { + unlink($temp_filename); + throw $e; + } + // @todo FIXME: Hardcoded chmod is lame, but seems to be necessary to + // keep from accidentally saving images from command-line (queues) + // that can't be read from web server, which causes hard-to-notice + // problems later on: + // + // http://status.net/open-source/issues/2663 + chmod(Avatar::path($filename), 0644); + + $profile->setOriginal($filename); +} + function linkback_profile($entry, $mf2, $response, $target) { if(isset($entry['author']) && isset($entry['author'][0]['properties'])) { $author = $entry['author'][0]['properties']; @@ -315,6 +348,10 @@ function linkback_profile($entry, $mf2, $response, $target) { $profile->nickname = isset($author['nickname']) ? $author['nickname'][0] : str_replace(' ', '', $author['name'][0]); $profile->created = common_sql_now(); $profile->insert(); + + if($author['photo'] && $author['photo'][0]) { + linkback_avatar($profile, $author['photo'][0]); + } } return array($profile, $author);