Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 108 |
BlockContentForm | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
210 | |
0.00% |
0 / 108 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
create | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
prepareEntity | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
form | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 46 |
|||
save | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 42 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\block_content\BlockContentForm. | |
*/ | |
namespace Drupal\block_content; | |
use Drupal\Component\Utility\Html; | |
use Drupal\Core\Entity\ContentEntityForm; | |
use Drupal\Core\Entity\EntityManagerInterface; | |
use Drupal\Core\Entity\EntityStorageInterface; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Language\LanguageManagerInterface; | |
use Symfony\Component\DependencyInjection\ContainerInterface; | |
/** | |
* Form controller for the custom block edit forms. | |
*/ | |
class BlockContentForm extends ContentEntityForm { | |
/** | |
* The custom block storage. | |
* | |
* @var \Drupal\Core\Entity\EntityStorageInterface | |
*/ | |
protected $blockContentStorage; | |
/** | |
* The custom block type storage. | |
* | |
* @var \Drupal\Core\Entity\EntityStorageInterface | |
*/ | |
protected $blockContentTypeStorage; | |
/** | |
* The language manager. | |
* | |
* @var \Drupal\Core\Language\LanguageManagerInterface | |
*/ | |
protected $languageManager; | |
/** | |
* The block content entity. | |
* | |
* @var \Drupal\block_content\BlockContentInterface | |
*/ | |
protected $entity; | |
/** | |
* Constructs a BlockContentForm object. | |
* | |
* @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager | |
* The entity manager. | |
* @param \Drupal\Core\Entity\EntityStorageInterface $block_content_storage | |
* The custom block storage. | |
* @param \Drupal\Core\Entity\EntityStorageInterface $block_content_type_storage | |
* The custom block type storage. | |
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager | |
* The language manager. | |
*/ | |
public function __construct(EntityManagerInterface $entity_manager, EntityStorageInterface $block_content_storage, EntityStorageInterface $block_content_type_storage, LanguageManagerInterface $language_manager) { | |
parent::__construct($entity_manager); | |
$this->blockContentStorage = $block_content_storage; | |
$this->blockContentTypeStorage = $block_content_type_storage; | |
$this->languageManager = $language_manager; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function create(ContainerInterface $container) { | |
$entity_manager = $container->get('entity.manager'); | |
return new static( | |
$entity_manager, | |
$entity_manager->getStorage('block_content'), | |
$entity_manager->getStorage('block_content_type'), | |
$container->get('language_manager') | |
); | |
} | |
/** | |
* Overrides \Drupal\Core\Entity\EntityForm::prepareEntity(). | |
* | |
* Prepares the custom block object. | |
* | |
* Fills in a few default values, and then invokes | |
* hook_block_content_prepare() on all modules. | |
*/ | |
protected function prepareEntity() { | |
$block = $this->entity; | |
// Set up default values, if required. | |
$block_type = $this->blockContentTypeStorage->load($block->bundle()); | |
if (!$block->isNew()) { | |
$block->setRevisionLog(NULL); | |
} | |
// Always use the default revision setting. | |
$block->setNewRevision($block_type->shouldCreateNewRevision()); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function form(array $form, FormStateInterface $form_state) { | |
$block = $this->entity; | |
$account = $this->currentUser(); | |
if ($this->operation == 'edit') { | |
$form['#title'] = $this->t('Edit custom block %label', array('%label' => $block->label())); | |
} | |
// Override the default CSS class name, since the user-defined custom block | |
// type name in 'TYPE-block-form' potentially clashes with third-party class | |
// names. | |
$form['#attributes']['class'][0] = 'block-' . Html::getClass($block->bundle()) . '-form'; | |
$form['advanced'] = array( | |
'#type' => 'vertical_tabs', | |
'#weight' => 99, | |
); | |
// Add a log field if the "Create new revision" option is checked, or if the | |
// current user has the ability to check that option. | |
$form['revision_information'] = array( | |
'#type' => 'details', | |
'#title' => $this->t('Revision information'), | |
// Open by default when "Create new revision" is checked. | |
'#open' => $block->isNewRevision(), | |
'#group' => 'advanced', | |
'#attributes' => array( | |
'class' => array('block-content-form-revision-information'), | |
), | |
'#attached' => array( | |
'library' => array('block_content/drupal.block_content'), | |
), | |
'#weight' => 20, | |
'#access' => $block->isNewRevision() || $account->hasPermission('administer blocks'), | |
); | |
$form['revision_information']['revision'] = array( | |
'#type' => 'checkbox', | |
'#title' => $this->t('Create new revision'), | |
'#default_value' => $block->isNewRevision(), | |
'#access' => $account->hasPermission('administer blocks'), | |
); | |
// Check the revision log checkbox when the log textarea is filled in. | |
// This must not happen if "Create new revision" is enabled by default, | |
// since the state would auto-disable the checkbox otherwise. | |
if (!$block->isNewRevision()) { | |
$form['revision_information']['revision']['#states'] = array( | |
'checked' => array( | |
'textarea[name="revision_log"]' => array('empty' => FALSE), | |
), | |
); | |
} | |
$form['revision_information']['revision_log'] = array( | |
'#type' => 'textarea', | |
'#title' => $this->t('Revision log message'), | |
'#rows' => 4, | |
'#default_value' => $block->getRevisionLog(), | |
'#description' => $this->t('Briefly describe the changes you have made.'), | |
); | |
return parent::form($form, $form_state, $block); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function save(array $form, FormStateInterface $form_state) { | |
$block = $this->entity; | |
// Save as a new revision if requested to do so. | |
if (!$form_state->isValueEmpty('revision')) { | |
$block->setNewRevision(); | |
} | |
$insert = $block->isNew(); | |
$block->save(); | |
$context = array('@type' => $block->bundle(), '%info' => $block->label()); | |
$logger = $this->logger('block_content'); | |
$block_type = $this->blockContentTypeStorage->load($block->bundle()); | |
$t_args = array('@type' => $block_type->label(), '%info' => $block->label()); | |
if ($insert) { | |
$logger->notice('@type: added %info.', $context); | |
drupal_set_message($this->t('@type %info has been created.', $t_args)); | |
} | |
else { | |
$logger->notice('@type: updated %info.', $context); | |
drupal_set_message($this->t('@type %info has been updated.', $t_args)); | |
} | |
if ($block->id()) { | |
$form_state->setValue('id', $block->id()); | |
$form_state->set('id', $block->id()); | |
if ($insert) { | |
if (!$theme = $block->getTheme()) { | |
$theme = $this->config('system.theme')->get('default'); | |
} | |
$form_state->setRedirect( | |
'block.admin_add', | |
array( | |
'plugin_id' => 'block_content:' . $block->uuid(), | |
'theme' => $theme, | |
) | |
); | |
} | |
else { | |
$form_state->setRedirectUrl($block->urlInfo('collection')); | |
} | |
} | |
else { | |
// In the unlikely case something went wrong on save, the block will be | |
// rebuilt and block form redisplayed. | |
drupal_set_message($this->t('The block could not be saved.'), 'error'); | |
$form_state->setRebuild(); | |
} | |
} | |
} |