BlockFieldForm.php in Display Suite 8.2
File
src/Form/BlockFieldForm.php
View source
<?php
namespace Drupal\ds\Form;
use Drupal\Core\Cache\Cache;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Form\FormState;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
class BlockFieldForm extends FieldFormBase implements ContainerInjectionInterface {
const TYPE = 'block';
public function getFormId() {
return 'ds_field_form';
}
public function buildForm(array $form, FormStateInterface $form_state, $field_key = '') {
$form = parent::buildForm($form, $form_state, $field_key);
$field = $this->field;
$manager = \Drupal::service('plugin.manager.block');
$blocks = array();
foreach ($manager
->getDefinitions() as $plugin_id => $plugin_definition) {
$blocks[$plugin_id] = $plugin_definition['admin_label'];
}
asort($blocks);
$form['block_identity']['block'] = array(
'#type' => 'select',
'#options' => $blocks,
'#title' => $this
->t('Block'),
'#required' => TRUE,
'#default_value' => isset($field['properties']['block']) ? $field['properties']['block'] : '',
);
$form['use_block_title'] = array(
'#type' => 'checkbox',
'#title' => $this
->t('Use block title as the field label'),
'#default_value' => isset($field['properties']['use_block_title']) ? $field['properties']['use_block_title'] : FALSE,
'#weight' => 90,
);
return $form;
}
public function getProperties(FormStateInterface $form_state) {
$properties['block'] = $form_state
->getValue('block');
$field_key = $form_state
->getValue('id');
$field = $this
->config('ds.field.' . $field_key)
->get();
if (isset($field['properties']) && $field['properties']['block'] == $properties['block']) {
$properties = $field['properties'];
}
$properties['use_block_title'] = $form_state
->getValue('use_block_title');
return $properties;
}
public function getType() {
return BlockFieldForm::TYPE;
}
public function getTypeLabel() {
return 'Block field';
}
public function submitForm(array &$form, FormStateInterface $form_state) {
parent::submitForm($form, $form_state);
$manager = \Drupal::service('plugin.manager.block');
$block_id = $this->field['properties']['block'];
$block = $manager
->createInstance($block_id);
$block_config_form = $block
->blockForm([], new FormState());
if ($block_config_form) {
$url = new Url('ds.manage_block_field_config', array(
'field_key' => $this->field['id'],
));
$form_state
->setRedirectUrl($url);
}
Cache::invalidateTags([
'config:ds.block_base',
]);
}
}