class InstagramBlockBlock in Instagram Block 8.3
Same name and namespace in other branches
- 8 src/Plugin/Block/InstagramBlockBlock.php \Drupal\instagram_block\Plugin\Block\InstagramBlockBlock
- 8.2 src/Plugin/Block/InstagramBlockBlock.php \Drupal\instagram_block\Plugin\Block\InstagramBlockBlock
Provides an Instagram block.
Plugin annotation
@Block(
id = "instagram_block_block",
admin_label = @Translation("Instagram block"),
category = @Translation("Social")
)
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\instagram_block\Plugin\Block\InstagramBlockBlock implements ContainerFactoryPluginInterface
- 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 InstagramBlockBlock
File
- src/
Plugin/ Block/ InstagramBlockBlock.php, line 26
Namespace
Drupal\instagram_block\Plugin\BlockView source
class InstagramBlockBlock extends BlockBase implements ContainerFactoryPluginInterface {
/**
* The HTTP client to fetch the feed data with.
*
* @var \GuzzleHttp\Client
*/
protected $httpClient;
/**
* The config factory.
*
* @var \Drupal\Core\Config\ConfigFactory
*/
protected $configFactory;
/**
* The logger factory.
*
* @var \Drupal\Core\Logger\LoggerChannelFactoryInterface
*/
protected $loggerFactory;
/**
* Constructs a InstagramBlockBlock object.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param array $plugin_definition
* The plugin implementation definition.
* @param \GuzzleHttp\Client $http_client
* The Guzzle HTTP client.
* @param \Drupal\Core\Config\ConfigFactory $config_factory
* The factory for configuration objects.
* @param \Drupal\Core\Logger\LoggerChannelFactoryInterface $logger_factory
* The factory for logger.
*/
public function __construct(array $configuration, $plugin_id, array $plugin_definition, Client $http_client, ConfigFactory $config_factory, LoggerChannelFactoryInterface $logger_factory) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->httpClient = $http_client;
$this->configFactory = $config_factory;
$this->loggerFactory = $logger_factory;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('http_client'), $container
->get('config.factory'), $container
->get('logger.factory'));
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'access_token' => '',
'count' => 4,
'width' => 150,
'height' => 150,
'img_resolution' => 'thumbnail',
'cache_time_minutes' => 1440,
];
}
/**
* {@inheritdoc}
*/
public function blockForm($form, FormStateInterface $form_state) {
$form['authorise'] = [
'#markup' => $this
->t('Instagram Block requires connecting to a specific Instagram account. You need to be able to log into that account when asked to. The @help page helps with the setup.', [
'@help' => Link::fromTextAndUrl($this
->t('Authenticate with Instagram'), Url::fromUri('https://www.drupal.org/node/2746185'))
->toString(),
]),
];
$form['access_token'] = [
'#type' => 'textfield',
'#title' => $this
->t('Access Token'),
'#description' => $this
->t('Your Instagram access token. Eg. 460786509.ab103e5.a54b6834494643588d4217ee986384a8'),
'#default_value' => $this->configuration['access_token'],
];
$form['count'] = [
'#type' => 'number',
'#title' => $this
->t('Number of images to display'),
'#default_value' => $this->configuration['count'],
];
$form['width'] = [
'#type' => 'number',
'#title' => $this
->t('Image width in pixels'),
'#default_value' => $this->configuration['width'],
];
$form['height'] = [
'#type' => 'number',
'#title' => $this
->t('Image height in pixels'),
'#default_value' => $this->configuration['height'],
];
$image_options = [
'thumbnail' => $this
->t('Thumbnail (150x150)'),
'low_resolution' => $this
->t('Low (320x320)'),
'standard_resolution' => $this
->t('Standard (640x640)'),
];
$form['img_resolution'] = [
'#type' => 'select',
'#title' => $this
->t('Image resolution'),
'#description' => $this
->t('Choose the quality of the images you would like to display.'),
'#default_value' => $this->configuration['img_resolution'],
'#options' => $image_options,
];
$form['cache_time_minutes'] = [
'#type' => 'number',
'#title' => $this
->t('Cache time in minutes'),
'#description' => $this
->t("Default is 1440 - 24 hours. This is important for performance reasons and so the Instagram API limits isn't reached on busy sites."),
'#default_value' => $this->configuration['cache_time_minutes'],
];
return $form;
}
/**
* {@inheritdoc}
*/
public function blockSubmit($form, FormStateInterface $form_state) {
if ($form_state
->hasAnyErrors()) {
return;
}
else {
$this->configuration['count'] = $form_state
->getValue('count');
$this->configuration['width'] = $form_state
->getValue('width');
$this->configuration['height'] = $form_state
->getValue('height');
$this->configuration['img_resolution'] = $form_state
->getValue('img_resolution');
$this->configuration['cache_time_minutes'] = $form_state
->getValue('cache_time_minutes');
$this->configuration['access_token'] = $form_state
->getValue('access_token');
}
}
/**
* {@inheritdoc}
*/
public function build() {
// Build a render array to return the Instagram Images.
$build = [];
// If no configuration was saved, don't attempt to build block.
if (empty($this->configuration['access_token'])) {
$this->loggerFactory
->get('instagram_block')
->error($this
->t('No access_token set'));
return $build;
}
// Build url for http request.
$uri = "https://api.instagram.com/v1/users/self/media/recent/";
$options = [
'query' => [
'access_token' => $this->configuration['access_token'],
'count' => $this->configuration['count'],
],
];
$url = Url::fromUri($uri, $options)
->toString();
// Get the instagram images and decode.
$result = $this
->fetchData($url);
if (!$result) {
return $build;
}
foreach ($result['data'] as $post) {
$build['children'][$post['id']] = [
'#theme' => 'instagram_block_image',
'#data' => $post,
'#href' => $post['link'],
'#src' => $post['images'][$this->configuration['img_resolution']]['url'],
'#width' => $this->configuration['width'],
'#height' => $this->configuration['height'],
];
}
// Add css.
if (!empty($build)) {
$build['#attached']['library'][] = 'instagram_block/instagram_block';
}
// Cache for a day.
$build['#cache']['keys'] = [
'block',
'instagram_block',
$this->configuration['id'],
$this->configuration['access_token'],
];
$build['#cache']['context'][] = 'languages:language_content';
$build['#cache']['max-age'] = $this->configuration['cache_time_minutes'] * 60;
return $build;
}
/**
* Sends a http request to the Instagram API Server.
*
* @param string $url
* URL for http request.
*
* @return bool|mixed
* The encoded response containing the instagram images or FALSE.
*/
protected function fetchData($url) {
try {
$response = $this->httpClient
->get($url, [
'headers' => [
'Accept' => 'application/json',
],
]);
$data = Json::decode($response
->getBody());
if (empty($data)) {
$this->loggerFactory
->get('instagram_block')
->error($this
->t('Invalid JSON or empty body returned by Instagram'));
return FALSE;
}
return $data;
} catch (RequestException $e) {
$this->loggerFactory
->get('instagram_block')
->error($e
->getMessage());
return FALSE;
}
}
}
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 |
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 | |
InstagramBlockBlock:: |
protected | property | The config factory. | |
InstagramBlockBlock:: |
protected | property | The HTTP client to fetch the feed data with. | |
InstagramBlockBlock:: |
protected | property | The logger factory. | |
InstagramBlockBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
InstagramBlockBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
InstagramBlockBlock:: |
public | function |
Builds and returns the renderable array for this block plugin. Overrides BlockPluginInterface:: |
|
InstagramBlockBlock:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
|
InstagramBlockBlock:: |
public | function |
Overrides BlockPluginTrait:: |
|
InstagramBlockBlock:: |
protected | function | Sends a http request to the Instagram API Server. | |
InstagramBlockBlock:: |
public | function |
Constructs a InstagramBlockBlock object. Overrides BlockPluginTrait:: |
|
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 |