Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
29.41% |
5 / 17 |
CRAP | |
31.82% |
21 / 66 |
BlockBase | |
0.00% |
0 / 1 |
|
36.84% |
7 / 19 |
206.57 | |
31.82% |
21 / 66 |
label | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
getConfiguration | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
setConfiguration | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
baseConfigurationDefaults | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
defaultConfiguration | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
setConfigurationValue | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
calculateDependencies | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
access | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 2 |
|||
blockAccess | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
buildConfigurationForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 22 |
|||
blockForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
validateConfigurationForm | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
blockValidate | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
submitConfigurationForm | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 6 |
|||
blockSubmit | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
getMachineNameSuggestion | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
transliteration | |
0.00% |
0 / 1 |
2.15 | |
66.67% |
2 / 3 |
|||
setTransliteration | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Block\BlockBase. | |
*/ | |
namespace Drupal\Core\Block; | |
use Drupal\block\BlockInterface; | |
use Drupal\Core\Access\AccessResult; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Core\Plugin\ContextAwarePluginAssignmentTrait; | |
use Drupal\Core\Plugin\ContextAwarePluginBase; | |
use Drupal\Component\Utility\Unicode; | |
use Drupal\Component\Utility\NestedArray; | |
use Drupal\Core\Language\LanguageInterface; | |
use Drupal\Core\Session\AccountInterface; | |
use Drupal\Component\Transliteration\TransliterationInterface; | |
/** | |
* Defines a base block implementation that most blocks plugins will extend. | |
* | |
* This abstract class provides the generic block configuration form, default | |
* block settings, and handling for general user-defined block visibility | |
* settings. | |
* | |
* @ingroup block_api | |
*/ | |
abstract class BlockBase extends ContextAwarePluginBase implements BlockPluginInterface { | |
use ContextAwarePluginAssignmentTrait; | |
/** | |
* The transliteration service. | |
* | |
* @var \Drupal\Component\Transliteration\TransliterationInterface | |
*/ | |
protected $transliteration; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function label() { | |
if (!empty($this->configuration['label'])) { | |
return $this->configuration['label']; | |
} | |
$definition = $this->getPluginDefinition(); | |
// Cast the admin label to a string since it is an object. | |
// @see \Drupal\Core\StringTranslation\TranslatableMarkup | |
return (string) $definition['admin_label']; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function __construct(array $configuration, $plugin_id, $plugin_definition) { | |
parent::__construct($configuration, $plugin_id, $plugin_definition); | |
$this->setConfiguration($configuration); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getConfiguration() { | |
return $this->configuration; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setConfiguration(array $configuration) { | |
$this->configuration = NestedArray::mergeDeep( | |
$this->baseConfigurationDefaults(), | |
$this->defaultConfiguration(), | |
$configuration | |
); | |
} | |
/** | |
* Returns generic default configuration for block plugins. | |
* | |
* @return array | |
* An associative array with the default configuration. | |
*/ | |
protected function baseConfigurationDefaults() { | |
return array( | |
'id' => $this->getPluginId(), | |
'label' => '', | |
'provider' => $this->pluginDefinition['provider'], | |
'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE, | |
); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function defaultConfiguration() { | |
return array(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function setConfigurationValue($key, $value) { | |
$this->configuration[$key] = $value; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function calculateDependencies() { | |
return array(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function access(AccountInterface $account, $return_as_object = FALSE) { | |
$access = $this->blockAccess($account); | |
return $return_as_object ? $access : $access->isAllowed(); | |
} | |
/** | |
* Indicates whether the block should be shown. | |
* | |
* Blocks with specific access checking should override this method rather | |
* than access(), in order to avoid repeating the handling of the | |
* $return_as_object argument. | |
* | |
* @param \Drupal\Core\Session\AccountInterface $account | |
* The user session for which to check access. | |
* | |
* @return \Drupal\Core\Access\AccessResult | |
* The access result. | |
* | |
* @see self::access() | |
*/ | |
protected function blockAccess(AccountInterface $account) { | |
// By default, the block is visible. | |
return AccessResult::allowed(); | |
} | |
/** | |
* {@inheritdoc} | |
* | |
* 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. | |
* | |
* @see \Drupal\Core\Block\BlockBase::blockForm() | |
*/ | |
public function buildConfigurationForm(array $form, FormStateInterface $form_state) { | |
$definition = $this->getPluginDefinition(); | |
$form['provider'] = array( | |
'#type' => 'value', | |
'#value' => $definition['provider'], | |
); | |
$form['admin_label'] = array( | |
'#type' => 'item', | |
'#title' => $this->t('Block description'), | |
'#plain_text' => $definition['admin_label'], | |
); | |
$form['label'] = array( | |
'#type' => 'textfield', | |
'#title' => $this->t('Title'), | |
'#maxlength' => 255, | |
'#default_value' => $this->label(), | |
'#required' => TRUE, | |
); | |
$form['label_display'] = array( | |
'#type' => 'checkbox', | |
'#title' => $this->t('Display title'), | |
'#default_value' => ($this->configuration['label_display'] === BlockInterface::BLOCK_LABEL_VISIBLE), | |
'#return_value' => BlockInterface::BLOCK_LABEL_VISIBLE, | |
); | |
// Add context mapping UI form elements. | |
$contexts = $form_state->getTemporaryValue('gathered_contexts') ?: []; | |
$form['context_mapping'] = $this->addContextAssignmentElement($this, $contexts); | |
// Add plugin-specific settings for this block type. | |
$form += $this->blockForm($form, $form_state); | |
return $form; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function blockForm($form, FormStateInterface $form_state) { | |
return array(); | |
} | |
/** | |
* {@inheritdoc} | |
* | |
* Most block plugins should not override this method. To add validation | |
* for a specific block type, override BlockBase::blockValidate(). | |
* | |
* @see \Drupal\Core\Block\BlockBase::blockValidate() | |
*/ | |
public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { | |
// Remove the admin_label form item element value so it will not persist. | |
$form_state->unsetValue('admin_label'); | |
$this->blockValidate($form, $form_state); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function blockValidate($form, FormStateInterface $form_state) {} | |
/** | |
* {@inheritdoc} | |
* | |
* Most block plugins should not override this method. To add submission | |
* handling for a specific block type, override BlockBase::blockSubmit(). | |
* | |
* @see \Drupal\Core\Block\BlockBase::blockSubmit() | |
*/ | |
public function submitConfigurationForm(array &$form, FormStateInterface $form_state) { | |
// Process the block's submission handling if no errors occurred only. | |
if (!$form_state->getErrors()) { | |
$this->configuration['label'] = $form_state->getValue('label'); | |
$this->configuration['label_display'] = $form_state->getValue('label_display'); | |
$this->configuration['provider'] = $form_state->getValue('provider'); | |
$this->blockSubmit($form, $form_state); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function blockSubmit($form, FormStateInterface $form_state) {} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getMachineNameSuggestion() { | |
$definition = $this->getPluginDefinition(); | |
$admin_label = $definition['admin_label']; | |
// @todo This is basically the same as what is done in | |
// \Drupal\system\MachineNameController::transliterate(), so it might make | |
// sense to provide a common service for the two. | |
$transliterated = $this->transliteration()->transliterate($admin_label, LanguageInterface::LANGCODE_DEFAULT, '_'); | |
$transliterated = Unicode::strtolower($transliterated); | |
$transliterated = preg_replace('@[^a-z0-9_.]+@', '', $transliterated); | |
return $transliterated; | |
} | |
/** | |
* Wraps the transliteration service. | |
* | |
* @return \Drupal\Component\Transliteration\TransliterationInterface | |
*/ | |
protected function transliteration() { | |
if (!$this->transliteration) { | |
$this->transliteration = \Drupal::transliteration(); | |
} | |
return $this->transliteration; | |
} | |
/** | |
* Sets the transliteration service. | |
* | |
* @param \Drupal\Component\Transliteration\TransliterationInterface $transliteration | |
* The transliteration service. | |
*/ | |
public function setTransliteration(TransliterationInterface $transliteration) { | |
$this->transliteration = $transliteration; | |
} | |
} |