<?php /** * Class TweetSetModifier * * * * @since 2.1 */ namespace TwitterFeed\SmashTwitter; use TwitterFeed\CTF_Parse; class TweetSetModifier { private $tweet_set; private $hydrated_tweet_set; public function set_tweet_set( $tweet_set ) { $this->tweet_set = $tweet_set; } public function get_hydrated_tweet_set() { return $this->hydrated_tweet_set; } public function hydrate_tweet_set() { if ( empty( $this->tweet_set ) ) { return; } $referenceable_tweet_set = array(); foreach ( $this->tweet_set as $tweet ) { $referenceable_tweet_set[ CTF_Parse::get_post_id( $tweet ) ] = $tweet; } $flagged_quoted_tweets = array(); $flagged_retweeted_quoted_tweets = array(); $flagged_retweets = array(); $this->hydrated_tweet_set = array(); foreach ( $referenceable_tweet_set as $id => $tweet ) { // if this is a tweet that was quoted we want to remove it from the feed (unless quoted by the same author) // Quoted tweets are instead added to the tweet that is doing the quoting through this hydration process $does_not_belong = in_array( (string)$id, $flagged_quoted_tweets, true ) && CTF_Parse::get_author_screen_name( $tweet ) !== CTF_Parse::get_author_screen_name( $referenceable_tweet_set[ $id ] ); if ( ! $does_not_belong ) { $does_not_belong = in_array( (string)$id, $flagged_retweets, true ); } if ( ! $does_not_belong ) { $does_not_belong = in_array( (string)$id, $flagged_retweeted_quoted_tweets, true ); } if ( ! $does_not_belong ) { $hydrated_tweet = $tweet; if ( ! empty( $tweet['is_quote_status'] ) && ! empty( $tweet['quoted_status_id_str'] ) && ! empty( $referenceable_tweet_set[ $tweet['quoted_status_id_str'] ] ) ) { $flagged_quoted_tweets[] = $tweet['quoted_status_id_str']; $hydrated_tweet['quoted_status'] = $referenceable_tweet_set[ $tweet['quoted_status_id_str'] ]; } if ( ! empty( $tweet['retweeted_status_id_str'] ) && ! empty( $tweet['retweeted_status_id_str'] ) && ! empty( $referenceable_tweet_set[ $tweet['retweeted_status_id_str'] ] ) ) { $flagged_retweets[] = $tweet['retweeted_status_id_str']; $hydrated_tweet['retweeted_status'] = $referenceable_tweet_set[ $tweet['retweeted_status_id_str'] ]; if ( strpos( $hydrated_tweet['text'], 'RT ' ) === 0 ) { $hydrated_tweet['text'] = str_replace( 'RT ', '', $hydrated_tweet['text'] ); $hydrated_tweet['full_text'] = str_replace( 'RT ', '', $hydrated_tweet['full_text'] ); } if ( ! empty( $hydrated_tweet['retweeted_status']['is_quote_status'] ) && ! empty( $hydrated_tweet['retweeted_status']['quoted_status_id_str'] ) && ! empty( $referenceable_tweet_set[ $hydrated_tweet['retweeted_status']['quoted_status_id_str'] ] ) ) { $flagged_retweeted_quoted_tweets[] = $hydrated_tweet['retweeted_status']['quoted_status_id_str']; $hydrated_tweet['retweeted_status']['quoted_status'] = $referenceable_tweet_set[ $tweet['quoted_status_id_str'] ]; } } $this->hydrated_tweet_set[] = $hydrated_tweet; } } } }