]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/Linkback/lib/util.php
[TRANSLATION] Update POTs and normalize files
[quix0rs-gnu-social.git] / plugins / Linkback / lib / util.php
index 894935b8b53c0996ef1449b3a75fef1a5bb3836e..c6ad121695a95bd936aea6f77fc491026f92b384 100644 (file)
@@ -243,8 +243,8 @@ function linkback_notice($source, $notice_or_user, $entry, $author, $mf2) {
 
     if (isset($entry['published']) || isset($entry['updated'])) {
         $options['created'] = isset($entry['published'])
-                                ? common_sql_date($entry['published'][0])
-                                : common_sql_date($entry['updated'][0]);
+                                ? common_sql_date(strtotime($entry['published'][0]))
+                                : common_sql_date(strtotime($entry['updated'][0]));
     }
 
     if (isset($entry['photo']) && common_valid_http_url($entry['photo'])) {
@@ -280,9 +280,42 @@ 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['properties']['author']) && isset($entry['properties']['author'][0]['properties'])) {
-        $author = $entry['properties']['author'][0]['properties'];
+    if(isset($entry['author']) && isset($entry['author'][0]['properties'])) {
+        $author = $entry['author'][0]['properties'];
     } else {
         $author = linkback_hcard($mf2, $response->getEffectiveUrl());
     }
@@ -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);
@@ -358,10 +395,14 @@ function linkback_save($source, $target, $response, $notice_or_user) {
             try { $dupe->saveKnownTags($options['tags']); } catch (ServerException $ex) {}
             try { $dupe->saveKnownUrls($options['urls']); } catch (ServerException $ex) {}
 
-            if($options['reply_to']) { $dupe->reply_to = $options['reply_to']; }
-            if($options['repeat_of']) { $dupe->repeat_of = $options['repeat_of']; }
-            if($dupe->reply_to != $orig->reply_to || $dupe->repeat_of != $orig->repeat_of) {
-                $parent = Notice::getKV('id', $dupe->repost_of ? $dupe->repost_of : $dupe->reply_to);
+            if (isset($options['reply_to'])) {
+                $dupe->reply_to = $options['reply_to'];
+            }
+            if (isset($options['repeat_of'])) {
+                $dupe->repeat_of = $options['repeat_of'];
+            }
+            if ($dupe->reply_to != $orig->reply_to || $dupe->repeat_of != $orig->repeat_of) {
+                $parent = Notice::getKV('id', $dupe->repeat_of ?: $dupe->reply_to);
                 if($parent instanceof Notice) {
                     // If we changed the reply_to or repeat_of we might live in a new conversation now
                     $dupe->conversation = $parent->conversation;