]> git.mxchange.org Git - friendica-addons.git/blobdiff - twitter/twitter.php
ItemContent is replaced
[friendica-addons.git] / twitter / twitter.php
index dea7e4df672c080e76b81d242aaf710aa05a9929..e1265d5d3cb5b5b8c311b7ee888eb5904dfa078f 100644 (file)
@@ -81,7 +81,6 @@ use Friendica\Model\Contact;
 use Friendica\Model\Conversation;
 use Friendica\Model\Group;
 use Friendica\Model\Item;
-use Friendica\Model\ItemContent;
 use Friendica\Model\ItemURI;
 use Friendica\Model\Post;
 use Friendica\Model\Tag;
@@ -411,7 +410,7 @@ function twitter_hook_fork(App $a, array &$b)
 
        if (DI::pConfig()->get($post['uid'], 'twitter', 'import')) {
                // Don't fork if it isn't a reply to a twitter post
-               if (($post['parent'] != $post['id']) && !Item::exists(['id' => $post['parent'], 'network' => Protocol::TWITTER])) {
+               if (($post['parent'] != $post['id']) && !Post::exists(['id' => $post['parent'], 'network' => Protocol::TWITTER])) {
                        Logger::notice('No twitter parent found', ['item' => $post['id']]);
                        $b['execute'] = false;
                        return;
@@ -545,6 +544,8 @@ function twitter_post_hook(App $a, array &$b)
                return;
        }
 
+       $thr_parent = null;
+
        if ($b['parent'] != $b['id']) {
                Logger::debug('Got comment', ['item' => $b]);
 
@@ -557,28 +558,24 @@ function twitter_post_hook(App $a, array &$b)
                }
 
                $condition = ['uri' => $b["thr-parent"], 'uid' => $b["uid"]];
-               $orig_post = Item::selectFirst([], $condition);
-               if (!DBA::isResult($orig_post)) {
+               $thr_parent = Post::selectFirst(['uri', 'extid', 'author-link', 'author-nick', 'author-network'], $condition);
+               if (!DBA::isResult($thr_parent)) {
                        Logger::warning('No parent found', ['thr-parent' => $b["thr-parent"]]);
                        return;
-               } else {
-                       $iscomment = true;
                }
 
+               if ($thr_parent['author-network'] == Protocol::TWITTER) {
+                       $nickname = '@[url=' . $thr_parent['author-link'] . ']' . $thr_parent['author-nick'] . '[/url]';
+                       $nicknameplain = '@' . $thr_parent['author-nick'];
 
-               $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post["author-link"]);
-               $nickname = "@[url=" . $orig_post["author-link"] . "]" . $nicknameplain . "[/url]";
-               $nicknameplain = "@" . $nicknameplain;
-
-               Logger::info('Comparing', ['nickname' => $nickname, 'nicknameplain' => $nicknameplain, 'body' => $b["body"]]);
-               if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false)) {
-                       $b["body"] = $nickname . " " . $b["body"];
+                       Logger::info('Comparing', ['nickname' => $nickname, 'nicknameplain' => $nicknameplain, 'body' => $b["body"]]);
+                       if ((strpos($b["body"], $nickname) === false) && (strpos($b["body"], $nicknameplain) === false)) {
+                               $b["body"] = $nickname . " " . $b["body"];
+                       }
                }
 
-               Logger::debug('Parent found', ['parent' => $orig_post]);
+               Logger::debug('Parent found', ['parent' => $thr_parent]);
        } else {
-               $iscomment = false;
-
                if ($b['private'] || !strstr($b['postopts'], 'twitter')) {
                        return;
                }
@@ -592,7 +589,7 @@ function twitter_post_hook(App $a, array &$b)
        }
 
        if (($b['verb'] == Activity::POST) && $b['deleted']) {
-               twitter_action($a, $b["uid"], twitter_get_id($orig_post["uri"]), "delete");
+               twitter_action($a, $b['uid'], twitter_get_id($thr_parent['uri']), 'delete');
        }
 
        if ($b['verb'] == Activity::LIKE) {
@@ -609,7 +606,7 @@ function twitter_post_hook(App $a, array &$b)
        if ($b['verb'] == Activity::ANNOUNCE) {
                Logger::info('Retweet', ['uid' => $b['uid'], 'id' => twitter_get_id($b["thr-parent"])]);
                if ($b['deleted']) {
-                       twitter_action($a, $b["uid"], twitter_get_id($orig_post["extid"]), "delete");
+                       twitter_action($a, $b['uid'], twitter_get_id($thr_parent['extid']), 'delete');
                } else {
                        twitter_retweet($b["uid"], twitter_get_id($b["thr-parent"]));
                }
@@ -668,7 +665,7 @@ function twitter_post_hook(App $a, array &$b)
 
                $b['body'] = twitter_update_mentions($b['body']);
 
-               $msgarr = ItemContent::getPlaintextPost($b, $max_char, true, BBCode::TWITTER);
+               $msgarr = Plaintext::getPost($b, $max_char, true, BBCode::TWITTER);
                Logger::info('Got plaintext', ['id' => $b['id'], 'message' => $msgarr]);
                $msg = $msgarr["text"];
 
@@ -733,8 +730,8 @@ function twitter_post_hook(App $a, array &$b)
 
                $post['status'] = $msg;
 
-               if ($iscomment) {
-                       $post["in_reply_to_status_id"] = twitter_get_id($orig_post["uri"]);
+               if ($thr_parent) {
+                       $post['in_reply_to_status_id'] = twitter_get_id($thr_parent['uri']);
                }
 
                $url = 'statuses/update';
@@ -748,7 +745,7 @@ function twitter_post_hook(App $a, array &$b)
                if (!empty($result->errors)) {
                        Logger::error('Send to Twitter failed', ['id' => $b['id'], 'error' => $result->errors]);
                        Worker::defer();
-               } elseif ($iscomment) {
+               } elseif ($thr_parent) {
                        Logger::notice('Post send, updating extid', ['id' => $b['id'], 'extid' => $result->id_str]);
                        Item::update(['extid' => "twitter::" . $result->id_str], ['id' => $b['id']]);
                }
@@ -853,8 +850,8 @@ function twitter_expire(App $a)
 
        Logger::notice('Start deleting expired posts');
 
-       $r = Item::select(['id', 'guid'], ['deleted' => true, 'network' => Protocol::TWITTER]);
-       while ($row = DBA::fetch($r)) {
+       $r = Post::select(['id', 'guid'], ['deleted' => true, 'network' => Protocol::TWITTER]);
+       while ($row = Post::fetch($r)) {
                Logger::info('[twitter] Delete expired item', ['id' => $row['id'], 'guid' => $row['guid'], 'callstack' => \Friendica\Core\System::callstack()]);
                DBA::delete('item', ['id' => $row['id']]);
        }
@@ -887,7 +884,7 @@ function twitter_prepare_body(App $a, array &$b)
                $item["plink"] = DI::baseUrl()->get() . "/display/" . $item["guid"];
 
                $condition = ['uri' => $item["thr-parent"], 'uid' => local_user()];
-               $orig_post = Item::selectFirst(['author-link'], $condition);
+               $orig_post = Post::selectFirst(['author-link'], $condition);
                if (DBA::isResult($orig_post)) {
                        $nicknameplain = preg_replace("=https?://twitter.com/(.*)=ism", "$1", $orig_post["author-link"]);
                        $nickname = "@[url=" . $orig_post["author-link"] . "]" . $nicknameplain . "[/url]";
@@ -898,7 +895,7 @@ function twitter_prepare_body(App $a, array &$b)
                        }
                }
 
-               $msgarr = ItemContent::getPlaintextPost($item, $max_char, true, BBCode::TWITTER);
+               $msgarr = Plaintext::getPost($item, $max_char, true, BBCode::TWITTER);
                $msg = $msgarr["text"];
 
                if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) {
@@ -1005,6 +1002,7 @@ function twitter_parse_link(App $a, array &$b)
  */
 function twitter_do_mirrorpost(App $a, $uid, $post)
 {
+       $datarray['uid'] = $uid;
        $datarray['extid'] = 'twitter::' . $post->id;
        $datarray['title'] = '';
 
@@ -1065,6 +1063,14 @@ function twitter_fetchtimeline(App $a, $uid)
 
        $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret);
 
+       // Ensure to have the own contact
+       try {
+               twitter_fetch_own_contact($a, $uid);
+       } catch (TwitterOAuthException $e) {
+               Logger::warning('Error fetching own contact', ['uid' => $uid, 'message' => $e->getMessage()]);
+               return;
+       }
+
        $parameters = ["exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended", "include_ext_alt_text" => true];
 
        $first_time = ($lastid == "");
@@ -1228,12 +1234,16 @@ function twitter_fetch_contact($uid, $data, $create_user)
        if (!empty($cid)) {
                DBA::update('contact', $fields, ['id' => $cid]);
                Contact::updateAvatar($cid, $avatar);
+       } else {
+               Logger::warning('No contact found', ['fields' => $fields]);
        }
 
        $contact = DBA::selectFirst('contact', [], ['uid' => $uid, 'alias' => "twitter::" . $data->id_str]);
-       if (!DBA::isResult($contact) && !$create_user) {
+       if (!DBA::isResult($contact) && empty($cid)) {
                Logger::warning('User contact not found', ['uid' => $uid, 'twitter-id' => $data->id_str]);
                return 0;
+       } elseif (!$create_user) {
+               return $cid;
        }
 
        if (!DBA::isResult($contact)) {
@@ -1573,13 +1583,14 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl
        $postarray['uri'] = "twitter::" . $post->id_str;
        $postarray['protocol'] = Conversation::PARCEL_TWITTER;
        $postarray['source'] = json_encode($post);
+       $postarray['direction'] = Conversation::PULL;
 
        if (empty($uriid)) {
                $uriid = $postarray['uri-id'] = ItemURI::insert(['uri' => $postarray['uri']]);
        }
 
        // Don't import our own comments
-       if (Item::exists(['extid' => $postarray['uri'], 'uid' => $uid])) {
+       if (Post::exists(['extid' => $postarray['uri'], 'uid' => $uid])) {
                Logger::info('Item found', ['extid' => $postarray['uri']]);
                return [];
        }
@@ -1589,9 +1600,9 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl
        if ($post->in_reply_to_status_id_str != "") {
                $thr_parent = "twitter::" . $post->in_reply_to_status_id_str;
 
-               $item = Item::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]);
+               $item = Post::selectFirst(['uri'], ['uri' => $thr_parent, 'uid' => $uid]);
                if (!DBA::isResult($item)) {
-                       $item = Item::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid]);
+                       $item = Post::selectFirst(['uri'], ['extid' => $thr_parent, 'uid' => $uid]);
                }
 
                if (DBA::isResult($item)) {
@@ -1713,6 +1724,7 @@ function twitter_createpost(App $a, $uid, $post, array $self, $create_user, $onl
                        $postarray['thr-parent'] = $retweet['uri'];
                } else {
                        $retweet['source'] = $postarray['source'];
+                       $retweet['direction'] = $postarray['direction'];
                        $retweet['private'] = $postarray['private'];
                        $retweet['allow_cid'] = $postarray['allow_cid'];
                        $retweet['contact-id'] = $postarray['contact-id'];
@@ -1789,7 +1801,7 @@ function twitter_fetchparentposts(App $a, $uid, $post, TwitterOAuth $connection,
                        break;
                }
 
-               if (Item::exists(['uri' => 'twitter::' . $post->id_str, 'uid' => $uid])) {
+               if (Post::exists(['uri' => 'twitter::' . $post->id_str, 'uid' => $uid])) {
                        break;
                }