class TwitterWidgetFormatter in Twitter Profile Widget 3.x
Same name and namespace in other branches
- 8.2 src/Plugin/Field/FieldFormatter/TwitterWidgetFormatter.php \Drupal\twitter_profile_widget\Plugin\Field\FieldFormatter\TwitterWidgetFormatter
Plugin implementation of the 'twitter_widget' formatter.
Plugin annotation
@FieldFormatter(
id = "twitter_widget",
label = @Translation("Twitter widget"),
field_types = {
"twitter_widget"
}
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\twitter_profile_widget\Plugin\Field\FieldFormatter\TwitterWidgetFormatter
- class \Drupal\Core\Field\FormatterBase implements FormatterInterface, ContainerFactoryPluginInterface
- class \Drupal\Core\Field\PluginSettingsBase implements DependentPluginInterface, PluginSettingsInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of TwitterWidgetFormatter
File
- src/
Plugin/ Field/ FieldFormatter/ TwitterWidgetFormatter.php, line 22
Namespace
Drupal\twitter_profile_widget\Plugin\Field\FieldFormatterView source
class TwitterWidgetFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items, $langcode = NULL) {
$instances = $items
->getValue();
$elements = [];
foreach ($instances as $instance) {
$elements[] = [
'#theme' => 'twitter_profile_widget',
'#headline' => (string) $instance['headline'],
'#tweets' => $this
->getTweets($instance),
'#view_all' => $this
->getViewAll($instance),
];
}
return $elements;
}
/**
* {@inheritdoc}
*/
public function view(FieldItemListInterface $items, $langcode = NULL) {
$elements = parent::view($items, $langcode);
$elements['#cache']['tags'][] = 'twitter_profile_widget';
return $elements;
}
/**
* Helper function to prepare the "View all" link.
*/
protected function getViewAll($instance) {
if (!empty($instance['view_all'])) {
if ($instance['list_type'] === 'search') {
$params = [
'q' => $instance['search'],
];
$getfield = '?' . http_build_query($params);
$url = Url::fromUri('https://twitter.com/search' . $getfield);
}
else {
$url = Url::fromUri('https://twitter.com/' . $instance['account']);
}
return Link::fromTextAndUrl($instance['view_all'], $url);
}
return '';
}
/**
* Implements hook_preprocess_HOOK().
*
* Take the user-entered Twitter "configuration" and return rendered tweets.
*/
protected function getTweets($instance) {
$tweets = TwitterProfile::pull($instance);
// If the API call returns errors, do not send any data to the template.
if ($tweets) {
return $this
->prepareTweets($tweets, $instance['count']);
}
return '';
}
/**
* Helper to parse Twitter's JSON and return a normalized array of tweets.
*
* @param object $tweets
* An array of tweets, in Twitter class format.
* @param int $count
* How many tweets should be displayed.
*
* @return string[]
* Non-keyed array of tweet elements.
*/
protected function prepareTweets($tweets, $count = 5) {
$inc = 0;
$tweets_filtered = [];
foreach ($tweets as $tweet) {
$inc++;
$tweet->retweet_eyebrow = FALSE;
// If this is a retweet, use the API-provided sub-element.
if (isset($tweet->retweeted_status)) {
$id = $tweet->retweeted_status->id;
$retweet_user = $tweet->retweeted_status->user->screen_name;
$original_user = $tweet->user->name;
$original_screen_name = $tweet->user->screen_name;
$retweet_link = Url::fromUri('//twitter.com/' . $retweet_user . '/status/' . $id);
$user_text = $original_user . ' Retweeted';
$user_url = Url::fromUri('//twitter.com/' . $original_screen_name);
$user_link = Link::fromTextAndUrl($user_text, $user_url);
// Switch $tweet object to its sub-element.
$tweet = $tweet->retweeted_status;
// Add the retweet eyebrow.
$tweet->retweet_link = $retweet_link;
$tweet->retweet_user = $user_link;
}
// Prepare the Tweet Action links, based on $tweet->id.
$timestamp = strtotime($tweet->created_at);
$tweets_filtered[$inc] = [
'id' => (int) $tweet->id,
'image' => self::schemaFreeLink($tweet->user->profile_image_url),
'image_user' => $tweet->user->name,
'author' => $tweet->user->name,
'username' => $tweet->user->screen_name,
'text' => self::parseTwitterLinks($tweet->text),
'timestamp' => $timestamp,
'time_ago' => $this
->t('@time ago', [
'@time' => \Drupal::service('date.formatter')
->formatInterval(\Drupal::time()
->getRequestTime() - $timestamp),
]),
'tweet_reply2' => Url::fromUri('//twitter.com/intent/tweet?in_reply_to=' . $tweet->id),
'tweet_retweet' => Url::fromUri('//twitter.com/intent/retweet?tweet_id=' . $tweet->id),
'tweet_star' => Url::fromUri('//twitter.com/intent/favorite?tweet_id=' . $tweet->id),
];
if (isset($tweet->retweet_link)) {
$tweets_filtered[$inc]['retweet_link'] = $tweet->retweet_link;
$tweets_filtered[$inc]['retweet_user'] = $tweet->retweet_user;
}
if ($inc >= $count) {
break;
}
}
return $tweets_filtered;
}
/**
* Strip 'http://' and 'https://' from a url, and replace it for '//'.
*/
public static function schemaFreeLink($url) {
$schemes = [
'http://',
'https://',
];
$url = str_replace($schemes, '//', $url);
return $url;
}
/**
* Helper function.
*
* Parses tweet text and replaces links, at-mentions, and hashtags.
*
* @param string $text
* String with the tweet.
*
* @return string
* Converted tweet that has anchor links to Twitter entity types.
*/
public static function parseTwitterLinks($text) {
// Links.
$text = preg_replace('@(https?://([-\\w\\.]+)+(/([\\w/_\\.]*(\\?\\S+)?(#\\S+)?)?)?)@', '<a href="$1">$1</a>', $text);
// @ mentions.
$text = preg_replace('/@(\\w+)/', '<a href="//twitter.com/$1">@$1</a>', $text);
// Hashtags.
$text = preg_replace('/\\s#(\\w+)/', ' <a href="//twitter.com/search?q=%23$1">#$1</a>', $text);
return $text;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
FormatterBase:: |
protected | property | The field definition. | |
FormatterBase:: |
protected | property | The label display setting. | |
FormatterBase:: |
protected | property |
The formatter settings. Overrides PluginSettingsBase:: |
|
FormatterBase:: |
protected | property | The view mode. | |
FormatterBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
12 |
FormatterBase:: |
protected | function | Returns the value of a field setting. | |
FormatterBase:: |
protected | function | Returns the array of field settings. | |
FormatterBase:: |
public static | function |
Returns if the formatter can be used for the provided field. Overrides FormatterInterface:: |
14 |
FormatterBase:: |
public | function |
Allows formatters to load information for field values being displayed. Overrides FormatterInterface:: |
2 |
FormatterBase:: |
public | function |
Returns a form to configure settings for the formatter. Overrides FormatterInterface:: |
24 |
FormatterBase:: |
public | function |
Returns a short summary for the current formatter settings. Overrides FormatterInterface:: |
22 |
FormatterBase:: |
public | function |
Constructs a FormatterBase object. Overrides PluginBase:: |
12 |
MessengerTrait:: |
protected | property | The messenger. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
protected | property | The plugin_id. | |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
2 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginSettingsBase:: |
protected | property | Whether default settings have been merged into the current $settings. | |
PluginSettingsBase:: |
protected | property | The plugin settings injected by third party modules. | |
PluginSettingsBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
6 |
PluginSettingsBase:: |
public static | function |
Defines the default settings for this plugin. Overrides PluginSettingsInterface:: |
42 |
PluginSettingsBase:: |
public | function |
Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
protected | function | Merges default settings values into $settings. | |
PluginSettingsBase:: |
public | function |
Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface:: |
3 |
PluginSettingsBase:: |
public | function |
Sets the value of a setting for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the settings for the plugin. Overrides PluginSettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
PluginSettingsBase:: |
public | function |
Unsets a third-party setting. Overrides ThirdPartySettingsInterface:: |
|
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
TwitterWidgetFormatter:: |
protected | function | Implements hook_preprocess_HOOK(). | |
TwitterWidgetFormatter:: |
protected | function | Helper function to prepare the "View all" link. | |
TwitterWidgetFormatter:: |
public static | function | Helper function. | |
TwitterWidgetFormatter:: |
protected | function | Helper to parse Twitter's JSON and return a normalized array of tweets. | |
TwitterWidgetFormatter:: |
public static | function | Strip 'http://' and 'https://' from a url, and replace it for '//'. | |
TwitterWidgetFormatter:: |
public | function |
Builds a renderable array for a fully themed field. Overrides FormatterBase:: |
|
TwitterWidgetFormatter:: |
public | function |
Builds a renderable array for a field value. Overrides FormatterInterface:: |