You are here

public function JuicerEmbedFeedBlock::blockForm in Juicer - Social Media Feed Aggregator 8

Returns the configuration form elements specific to this block plugin.

Blocks that need to add form elements to the normal block configuration form should implement this method.

Parameters

array $form: The form definition array for the block configuration form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The renderable form array representing the entire configuration form.

Overrides BlockPluginTrait::blockForm

File

src/Plugin/Block/JuicerEmbedFeedBlock.php, line 63

Class

JuicerEmbedFeedBlock
Provides a Juicer embed block.

Namespace

Drupal\juicerio\Plugin\Block

Code

public function blockForm($form, FormStateInterface $form_state) {
  $delta = $this
    ->getDerivativeId();
  $config = $this
    ->getConfiguration();

  // Options array for later down in the form.
  $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',
  ];

  // Set the Juicer ID at the block level.
  $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.'),
  ];

  // Feed style.
  $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',
  ];

  // Number of posts.
  $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,
  ];

  // Infinite scrolling pages.
  $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.'),
  ];

  // Space between posts.
  $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.'),
  ];

  // Change number of columns.
  $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."),
  ];

  // Filter the posts based on social account.
  $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;
}