View source
<?php
namespace Drupal\juicerio\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class JuicerEmbedFeedBlock extends BlockBase implements BlockPluginInterface, ContainerFactoryPluginInterface {
protected $configFactory;
public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->configFactory = $config_factory;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('config.factory'));
}
public function blockForm($form, FormStateInterface $form_state) {
$delta = $this
->getDerivativeId();
$config = $this
->getConfiguration();
$post_number_array = [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
15,
20,
25,
50,
75,
100,
250,
500,
1000,
];
$pagination_array = [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
15,
20,
25,
50,
100,
];
$column_array = [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
];
$style_array = [
'modern' => 'Modern',
'night' => 'Night',
'polaroid' => 'Polaroid',
'image_grid' => 'Image Grid',
'widget' => 'Widget',
'slider' => 'Slider',
'hip' => 'Hip',
'living_wall' => 'Living Wall',
];
$form['juicer'] = [
'#type' => 'details',
'#title' => 'Juicer Feed Settings',
];
$form['juicer'][$delta . '_feed_id'] = [
'#type' => 'textfield',
'#title' => $this
->t('Juicer Username Override'),
'#default_value' => isset($config[$delta . '_feed_id']) ? $config[$delta . '_feed_id'] : '',
'#description' => $this
->t('Enter a block level Juicer username. If left blank the default will be taken from the global username.'),
];
$form['juicer'][$delta . '_style'] = [
'#type' => 'select',
'#title' => $this
->t('Feed Style'),
'#options' => $style_array,
'#description' => $this
->t('Select the style in which the feed is displayed.'),
'#default_value' => isset($config[$delta . '_style']) ? $config[$delta . '_style'] : 'modern',
];
$form['juicer'][$delta . '_post_number'] = [
'#type' => 'select',
'#title' => $this
->t('Number of posts'),
'#options' => array_combine($post_number_array, $post_number_array),
'#description' => $this
->t('Set the total number of posts shown. Defaults to 100.'),
'#default_value' => isset($config[$delta . '_post_number']) ? $config[$delta . '_post_number'] : 0,
];
$form['juicer'][$delta . '_infinite_pages'] = [
'#type' => 'select',
'#title' => $this
->t('Number of scrolling pages'),
'#default_value' => isset($config[$delta . '_infinite_pages']) ? $config[$delta . '_infinite_pages'] : 0,
'#options' => array_combine($pagination_array, $pagination_array),
'#description' => $this
->t('Set to 0 your feed will scroll infinitely: more and more posts will keep being added to the feed until all your posts are visible.<br />
If set to 1, only the first page of results will be visible. If set to 2, the feed will scroll just once.'),
];
$form['juicer'][$delta . '_gutter_amt'] = [
'#type' => 'textfield',
'#title' => $this
->t('Column gutter size'),
'#field_suffix' => $this
->t('pixels'),
'#size' => 5,
'#default_value' => isset($config[$delta . '_gutter_amt']) ? $config[$delta . '_gutter_amt'] : '',
'#description' => $this
->t('The column gutter is the horizontal space between columns of posts. Defaults to 20 pixels.'),
];
$form['juicer'][$delta . '_column_number'] = [
'#type' => 'select',
'#title' => $this
->t('Number of columns'),
'#default_value' => isset($config[$delta . '_column_number']) ? $config[$delta . '_column_number'] : 1,
'#options' => array_combine($column_array, $column_array),
'#description' => $this
->t("Columns are not allowed to be less than 200px (as it doesn't look good). If the number of columns set here is not respected, increase the size of the containing element."),
];
$form['juicer'][$delta . '_filter'] = [
'#type' => 'textfield',
'#title' => $this
->t('Filter the posts based on social account'),
'#default_value' => isset($config[$delta . '_filter']) ? $config[$delta . '_filter'] : '',
'#description' => $this
->t('To filter your posts, enter either the capitalized name of the source, or the account name of source source.<br />
Example: If you have an Instagram source of #tbt, enter either <em>tbt</em> or <em>Instagram</em> to only show posts from that source.<br />
Note: If you have multiple Instagram sources entering <em>Instagram</em> will show posts from all of them.'),
];
return $form;
}
public function blockSubmit($form, FormStateInterface $form_state) {
parent::blockSubmit($form, $form_state);
$values = $form_state
->getValues();
$delta = $this
->getDerivativeId();
$this->configuration[$delta . '_feed_id'] = $values['juicer'][$delta . '_feed_id'];
$this->configuration[$delta . '_post_number'] = $values['juicer'][$delta . '_post_number'];
$this->configuration[$delta . '_infinite_pages'] = $values['juicer'][$delta . '_infinite_pages'];
$this->configuration[$delta . '_gutter_amt'] = $values['juicer'][$delta . '_gutter_amt'];
$this->configuration[$delta . '_column_number'] = $values['juicer'][$delta . '_column_number'];
$this->configuration[$delta . '_filter'] = $values['juicer'][$delta . '_filter'];
$this->configuration[$delta . '_style'] = $values['juicer'][$delta . '_style'];
}
public function build() {
$delta = $this
->getDerivativeId();
if ($this->configuration[$delta . '_feed_id']) {
$juicer_feed_id = $this->configuration[$delta . '_feed_id'];
}
else {
$juicer_feed_id = $this->configFactory
->get('juicerio.settings')
->get('juicer_feed_id');
}
$juicer_library = $this->configFactory
->get('juicerio.settings')
->get('juicer_js_embed');
return [
'#theme' => 'juicerio_feed',
'#feed_id' => $juicer_feed_id,
'#post_num' => $this->configuration[$delta . '_post_number'],
'#infinite_pages' => $this->configuration[$delta . '_infinite_pages'],
'#gutter_amt' => $this->configuration[$delta . '_gutter_amt'],
'#column_num' => $this->configuration[$delta . '_column_number'],
'#filters' => $this->configuration[$delta . '_filter'],
'#attached' => [
'library' => [
'juicerio/' . $juicer_library,
'juicerio/juicerio.styles',
],
],
];
}
}