class FacebookFeedBlock in Facebook Feed Block 8
Provides a 'FacebookFeedBlock' block.
Plugin annotation
@Block(
id = "facebook_feed_block",
admin_label = @Translation("Facebook feed"),
)
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\facebook_feed\Plugin\Block\FacebookFeedBlock
- class \Drupal\Core\Block\BlockBase implements BlockPluginInterface, PluginWithFormsInterface, PreviewFallbackInterface uses BlockPluginTrait, ContextAwarePluginAssignmentTrait
- class \Drupal\Core\Plugin\ContextAwarePluginBase implements CacheableDependencyInterface, ContextAwarePluginInterface uses DependencySerializationTrait, StringTranslationTrait, TypedDataTrait
- class \Drupal\Component\Plugin\ContextAwarePluginBase implements ContextAwarePluginInterface
Expanded class hierarchy of FacebookFeedBlock
File
- src/
Plugin/ Block/ FacebookFeedBlock.php, line 17
Namespace
Drupal\facebook_feed\Plugin\BlockView source
class FacebookFeedBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'page_id' => '',
'access_token' => '',
'show_socials' => TRUE,
'limit' => 10,
] + parent::defaultConfiguration();
}
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form['feed_settings'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Feed settings'),
'#weight' => '5',
];
$form['feed_settings']['page_id'] = [
'#type' => 'textfield',
'#title' => $this
->t('Page ID'),
'#description' => $this
->t('ID of the page'),
'#default_value' => $this->configuration['page_id'],
'#maxlength' => 64,
'#size' => 15,
'#required' => TRUE,
];
$form['feed_settings']['page_id_info'] = [
'#type' => 'details',
'#title' => $this
->t('What is my page ID?'),
'#weight' => '6',
];
$form['feed_settings']['page_id_info']['summary'] = [
'#markup' => '<p>If you have a Facebook <b>page</b> with a URL like this: <code>https://www.facebook.com/your_page_name</code> then the Page ID is just <b>your_page_name</b>.</p>',
];
$form['feed_settings']['access_token'] = [
'#type' => 'textarea',
'#title' => $this
->t('(optional) Access token'),
'#description' => $this
->t('Access token needed to deal with the Facebook API'),
'#default_value' => $this->configuration['access_token'],
'#weight' => '7',
];
$form['feed_settings']['access_token_info'] = [
'#type' => 'details',
'#title' => $this
->t('What is an access token?'),
'#weight' => '8',
];
$form['feed_settings']['access_token_info']['summary'] = [
'#markup' => '<p>A Facebook Access Token is not required to use this module, but we recommend it so that you are not reliant on the token built into the module.</p>' . '<p>If you have your own token then you can enter it here.</p>' . '<p>To get your own Access Token you can follow these step-by-step instructions.</p>',
];
$form['feed_settings']['show_socials'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Show social media stats'),
'#description' => $this
->t('Whether the number of likes, comments and shares of each post should be shown.'),
'#default_value' => $this->configuration['show_socials'],
'#weight' => '9',
];
$form['feed_settings']['limit'] = [
'#type' => 'number',
'#title' => $this
->t('Posts limit'),
'#description' => $this
->t('The maximum number of posts that will be fetched.'),
'#default_value' => $this->configuration['limit'],
'#min' => 0,
'#max' => 100,
'#step' => 1,
'#size' => 3,
'#weight' => '10',
];
return $form;
}
/**
* {@inheritdoc}
*/
public function blockSubmit($form, FormStateInterface $form_state) {
$this->configuration['page_id'] = $form_state
->getValue('feed_settings')['page_id'];
$this->configuration['access_token'] = $form_state
->getValue('feed_settings')['access_token'];
$this->configuration['show_socials'] = $form_state
->getValue('feed_settings')['show_socials'];
$this->configuration['limit'] = $form_state
->getValue('feed_settings')['limit'];
}
/**
* {@inheritdoc}
*/
public function build() {
$posts = [];
try {
$posts = $this
->getPosts();
} catch (\Exception $e) {
\Drupal::messenger()
->addMessage(t('Facebook error.'), 'error');
}
$build = [
'#prefix' => '<div class="facebook_feed">',
'#suffix' => '</div>',
];
$build['#attached']['library'][] = 'facebook_feed/display';
$build['#attached']['library'][] = 'facebook_feed/font_awesome';
if (!$posts) {
return $build;
}
foreach ($posts['data'] as $post) {
$build[$post['id']] = $this
->themePost($post);
}
return $build;
}
/**
* Fetches a list of page posts using Facebook's Graph API.
*
* @return array
* An array of objects containing post data.
*/
private function getSettings() {
$postFields = [
'id',
'created_time',
'message',
'picture',
'link',
'comments.summary(true)',
'reactions.summary(true)',
'likes.summary(true)',
'shares',
];
$settings = [
'page_id' => $this->configuration['page_id'],
'feedType' => 'feed',
'limit' => $this->configuration['limit'],
'access_token' => $this
->getAccessToken(),
'fields' => implode(',', $postFields),
];
return $settings;
}
/**
* Fetches a list of page posts using Facebook's Graph API.
*
* @return mixed
* An array of objects containing post data.
*/
private function getPosts() {
$settings = $this
->getSettings();
$uri = 'https://graph.facebook.com/' . $settings['page_id'] . '/' . $settings['feedType'] . '?summary=true&limit=' . $settings['limit'] . '&access_token=' . $settings['access_token'] . '&fields=' . $settings['fields'];
$response = \Drupal::httpClient()
->get($uri, [
'headers' => [
'Accept' => 'text/plain',
],
]);
return Json::decode($response
->getBody());
}
/**
* Get Access token.
*
* @return string|null
* Token.
*/
private function getAccessToken() {
$accessToken = $this->configuration['access_token'];
if (!$accessToken) {
return NULL;
}
return $accessToken;
}
/**
* Creates a themable array of post data.
*
* @param array $post
* Object containing post data from a call to Facebook's Graph API.
*
* @return array
* A renderable array.
*/
private function themePost(array $post) {
return [
'#theme' => 'facebook_post',
'#id' => $post['id'] ?: '',
'#created_time' => $post['created_time'] ?: '',
'#message' => $post['message'] ?: '',
'#picture' => $post['picture'] ?: '',
'#link' => $post['link'] ?: '',
'#show_socials' => $this->configuration['show_socials'],
'#num_likes' => \array_key_exists('likes', $post) ? $post['likes']['summary']['total_count'] : 0,
'#num_comments' => \array_key_exists('comments', $post) ? $post['comments']['summary']['total_count'] : 0,
'#num_reactions' => \array_key_exists('reactions', $post) ? $post['reactions']['summary']['total_count'] : 0,
'#num_shares' => \array_key_exists('shares', $post) ? $post['shares']['count'] : 0,
];
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlockPluginInterface:: |
constant | Indicates the block label (title) should be displayed to end users. | ||
BlockPluginTrait:: |
protected | property | The transliteration service. | |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
protected | function | Returns generic default configuration for block plugins. | |
BlockPluginTrait:: |
protected | function | Indicates whether the block should be shown. | 16 |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | Creates a generic configuration form for all block types. Individual block plugins can add elements to this form by overriding BlockBase::blockForm(). Most block plugins should not override this method unless they need to alter the generic form elements. | 2 |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 1 | |
BlockPluginTrait:: |
public | function | 3 | |
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | ||
BlockPluginTrait:: |
public | function | Sets the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add submission handling for a specific block type, override BlockBase::blockSubmit(). | |
BlockPluginTrait:: |
protected | function | Wraps the transliteration service. | |
BlockPluginTrait:: |
public | function | Most block plugins should not override this method. To add validation for a specific block type, override BlockBase::blockValidate(). | 1 |
BlockPluginTrait:: |
public | function | 22 | |
ContextAwarePluginAssignmentTrait:: |
protected | function | Builds a form element for assigning a context to a given slot. | |
ContextAwarePluginAssignmentTrait:: |
protected | function | Wraps the context handler. | |
ContextAwarePluginBase:: |
protected | property | The data objects representing the context of this plugin. | |
ContextAwarePluginBase:: |
private | property | Data objects representing the contexts passed in the plugin configuration. | |
ContextAwarePluginBase:: |
protected | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
The cache contexts associated with this object. Overrides CacheableDependencyInterface:: |
9 |
ContextAwarePluginBase:: |
public | function |
The maximum age for which this object may be cached. Overrides CacheableDependencyInterface:: |
7 |
ContextAwarePluginBase:: |
public | function |
The cache tags associated with this object. Overrides CacheableDependencyInterface:: |
4 |
ContextAwarePluginBase:: |
public | function |
This code is identical to the Component in order to pick up a different
Context class. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the value for a defined context. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Gets the values for all defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Set a context on this plugin. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function |
Sets the value for a defined context. Overrides ContextAwarePluginBase:: |
|
ContextAwarePluginBase:: |
public | function |
Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface:: |
|
ContextAwarePluginBase:: |
public | function | Implements magic __get() method. | |
DependencySerializationTrait:: |
protected | property | An array of entity type IDs keyed by the property name of their storages. | |
DependencySerializationTrait:: |
protected | property | An array of service IDs keyed by property name used for serialization. | |
DependencySerializationTrait:: |
public | function | 1 | |
DependencySerializationTrait:: |
public | function | 2 | |
FacebookFeedBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
FacebookFeedBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
FacebookFeedBlock:: |
public | function |
Builds and returns the renderable array for this block plugin. Overrides BlockPluginInterface:: |
|
FacebookFeedBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
FacebookFeedBlock:: |
private | function | Get Access token. | |
FacebookFeedBlock:: |
private | function | Fetches a list of page posts using Facebook's Graph API. | |
FacebookFeedBlock:: |
private | function | Fetches a list of page posts using Facebook's Graph API. | |
FacebookFeedBlock:: |
private | function | Creates a themable array of post data. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
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:: |
3 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
PluginWithFormsTrait:: |
public | function | ||
PluginWithFormsTrait:: |
public | function | ||
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
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. | |
TypedDataTrait:: |
protected | property | The typed data manager used for creating the data types. | |
TypedDataTrait:: |
public | function | Gets the typed data manager. | 2 |
TypedDataTrait:: |
public | function | Sets the typed data manager. | 2 |