abstract class ShortcodeBase in Shortcode 2.0.x
Same name and namespace in other branches
- 8 src/Plugin/ShortcodeBase.php \Drupal\shortcode\Plugin\ShortcodeBase
Provides a base class for Shortcode plugins.
Hierarchy
- class \Drupal\Component\Plugin\PluginBase implements DerivativeInspectionInterface, PluginInspectionInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
- class \Drupal\shortcode\Plugin\ShortcodeBase implements ShortcodeInterface
- class \Drupal\Core\Plugin\PluginBase uses DependencySerializationTrait, MessengerTrait, StringTranslationTrait
Expanded class hierarchy of ShortcodeBase
See also
\Drupal\filter\Annotation\Filter
\Drupal\shortcode\ShortcodePluginManager
\Drupal\shortcode\Plugin\ShortcodeInterface
11 files declare their use of ShortcodeBase
- BlockShortcode.php in shortcode_basic_tags/
src/ Plugin/ Shortcode/ BlockShortcode.php - BootstrapColumnShortcode.php in shortcode_example/
src/ Plugin/ Shortcode/ BootstrapColumnShortcode.php - ButtonShortcode.php in shortcode_basic_tags/
src/ Plugin/ Shortcode/ ButtonShortcode.php - ClearShortcode.php in shortcode_basic_tags/
src/ Plugin/ Shortcode/ ClearShortcode.php - DropcapShortcode.php in shortcode_basic_tags/
src/ Plugin/ Shortcode/ DropcapShortcode.php
File
- src/
Plugin/ ShortcodeBase.php, line 21
Namespace
Drupal\shortcode\PluginView source
abstract class ShortcodeBase extends PluginBase implements ShortcodeInterface {
/**
* The plugin ID of this filter.
*
* @var string
*/
protected $pluginId;
/**
* The name of the provider that owns this filter.
*
* @var string
*/
public $provider;
/**
* A Boolean indicating whether this filter is enabled.
*
* @var bool
*/
public $status = FALSE;
/**
* An associative array containing the configured settings of this filter.
*
* @var array
*/
public $settings = [];
/**
* {@inheritdoc}
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->provider = $this->pluginDefinition['provider'];
$this
->setConfiguration($configuration);
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition);
}
/**
* {@inheritdoc}
*/
public function getConfiguration() {
return [
'id' => $this
->getPluginId(),
'provider' => $this->pluginDefinition['provider'],
'status' => $this->status,
'settings' => $this->settings,
];
}
/**
* {@inheritdoc}
*/
public function setConfiguration(array $configuration) {
if (isset($configuration['status'])) {
$this->status = (bool) $configuration['status'];
}
if (isset($configuration['settings'])) {
$this->settings = (array) $configuration['settings'];
}
return $this;
}
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'provider' => $this->pluginDefinition['provider'],
'status' => FALSE,
'settings' => $this->pluginDefinition['settings'],
];
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
return [];
}
/**
* {@inheritdoc}
*/
public function getType() {
return $this->pluginDefinition['type'];
}
/**
* {@inheritdoc}
*/
public function getLabel() {
return $this->pluginDefinition['title'];
}
/**
* {@inheritdoc}
*/
public function getDescription() {
return $this->pluginDefinition['description'];
}
/**
* {@inheritdoc}
*/
public function settingsForm(array $form, FormStateInterface $form_state) {
// Implementations should work with and return $form. Returning an empty
// array here allows the text format administration form to identify whether
// this shortcode plugin has any settings form elements.
return [];
}
/**
* {@inheritdoc}
*/
public function tips($long = FALSE) {
return '';
}
/**
* Combines user attributes with known attributes.
*
* The $defaults should be considered to be all of the attributes which are
* supported by the caller and given as a list. The returned attributes will
* only contain the attributes in the $defaults list.
*
* If the $attributes list has unsupported attributes, they will be ignored
* and removed from the final return list.
*
* @param array $defaults
* Entire list of supported attributes and their defaults.
* @param array $attributes
* User defined attributes in Shortcode tag.
*
* @return array
* Combined and filtered attribute list.
*/
public function getAttributes(array $defaults, array $attributes) {
$attributes = (array) $attributes;
$out = [];
foreach ($defaults as $name => $default) {
if (array_key_exists($name, $attributes)) {
$out[$name] = $attributes[$name];
}
else {
$out[$name] = $default;
}
}
return $out;
}
/**
* Add a class into a classes string if not already inside.
*
* @param mixed|string|array $classes
* The classes string or array.
* @param string $new_class
* The class to add.
*
* @return string
* The proper classes string.
*/
public function addClass($classes = '', $new_class = '') {
$return = [];
if (is_array($classes)) {
$return = $classes;
}
else {
$return = explode(' ', Html::escape($classes));
}
if ($new_class) {
$return[] = Html::escape($new_class);
}
$return = array_unique($return);
return implode(' ', $return);
}
/**
* Returns a url to be used in a link element given path or url.
*
* If a path is supplied, an absolute url will be returned.
*
* @param string $path
* The internal path to be translated.
* @param bool $media_file_url
* TRUE If a media path is supplied, return the file url.
*/
public function getUrlFromPath($path, $media_file_url = FALSE) {
if ($path === '<front>') {
$path = '/';
}
// Path validator. Return the path if an absolute url is detected.
if (UrlHelper::isValid($path, TRUE)) {
return $path;
}
// Add a leading slash if not present.
$path = '/' . ltrim($path, '/');
if (!empty($media_file_url) && substr($path, 0, 6) === "/media") {
$mid = $this
->getMidFromPath($path);
if ($mid) {
return $this
->getMediaFileUrl($mid);
}
}
else {
/** @var \Drupal\Core\Path\AliasManager $alias_manager */
$alias_manager = \Drupal::service('path_alias.manager');
$alias = $alias_manager
->getAliasByPath($path);
}
// Convert relative URL to absolute.
$url = Url::fromUserInput($alias, [
'absolute' => TRUE,
])
->toString();
return $url;
}
/**
* Extracts the media id from a 'media/x' system path.
*
* @param string $path
* The internal path to be translated.
*
* @return mixed|int|bool
* The media id if found.
*/
public function getMidFromPath($path) {
if (preg_match('/media\\/(\\d+)/', $path, $matches)) {
return $matches[1];
}
return FALSE;
}
/**
* Get the file url for a media object.
*
* @param int $mid
* Media id.
*
* @return mixed|int|bool
* The media id if found.
*/
public function getMediaFileUrl($mid) {
$media_entity = Media::load($mid);
$field_media = $this
->getMediaField($media_entity);
if ($field_media) {
$file = $field_media->entity;
return file_create_url($file
->getFileUri());
}
return FALSE;
}
/**
* Get a media entity field.
*
* Loop through Drupal media file fields, and return a field object if
* found.
*
* @param \Drupal\media\Entity\Media $entity
* Drupal media entity.
*
* @return mixed|object|bool
* If available, the field object.
*/
public function getMediaField(Media $entity) {
$media_file_fields = [
'field_media_file',
'field_media_image',
'field_media_video_file',
'field_media_audio_file',
];
foreach ($media_file_fields as $field_name) {
if ($entity
->hasField($field_name)) {
return $entity
->get($field_name);
}
}
return FALSE;
}
/**
* Returns image properties for a given image media entity id.
*
* @param int $mid
* Media entity id.
*
* @return array
* File properties: `alt` and `path` where available.
*/
public function getImageProperties($mid) {
$properties = [
'alt' => '',
'path' => '',
];
if (intval($mid)) {
$media_entity = Media::load($mid);
}
if ($media_entity) {
$field_media = $this
->getMediaField($media_entity);
}
if ($field_media) {
$file = $field_media->entity;
if (isset($field_media->alt)) {
$properties['alt'] = $field_media->alt;
}
}
if ($file) {
$properties['path'] = $file
->getFileUri();
}
return $properties;
}
/**
* Returns a suitable title string given the user provided title and text.
*
* @param string $title
* The user provided title.
* @param string $text
* The user provided text.
*
* @return string
* The title to be used.
*/
public function getTitleFromAttributes($title, $text) {
// Allow setting no title.
if ($title === '<none>') {
$title = '';
}
else {
$title = empty($title) ? trim(strip_tags($text)) : Html::escape($title);
}
return $title;
}
/**
* Wrapper for renderPlain.
*
* We use renderplain so that the shortcode's cache tags would not bubble up
* to the parent and affect cacheability. Shortcode should be part of content
* and self-container.
*
* @param array $elements
* The structured array describing the data to be rendered.
*
* @return \Drupal\Component\Render\MarkupInterface|mixed
* Element stripped of any bubbleable metadata.
*/
public function render(array &$elements) {
/** @var \Drupal\Core\Render\Renderer $renderer */
$renderer = \Drupal::service('renderer');
return $renderer
->renderPlain($elements);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
protected | property | ||
DependencySerializationTrait:: |
public | function | 2 | |
DependencySerializationTrait:: |
public | function | 2 | |
MessengerTrait:: |
protected | property | The messenger. | 27 |
MessengerTrait:: |
public | function | Gets the messenger. | 27 |
MessengerTrait:: |
public | function | Sets the messenger. | |
PluginBase:: |
protected | property | Configuration information passed into the plugin. | 1 |
PluginBase:: |
protected | property | The plugin implementation definition. | 1 |
PluginBase:: |
constant | A string which is used to separate base plugin IDs from the derivative ID. | ||
PluginBase:: |
public | function |
Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface:: |
|
PluginBase:: |
public | function |
Gets the definition of the plugin implementation. Overrides PluginInspectionInterface:: |
2 |
PluginBase:: |
public | function |
Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface:: |
|
PluginBase:: |
public | function | Determines if the plugin is configurable. | |
ShortcodeBase:: |
protected | property |
The plugin ID of this filter. Overrides PluginBase:: |
|
ShortcodeBase:: |
public | property | The name of the provider that owns this filter. | |
ShortcodeBase:: |
public | property | An associative array containing the configured settings of this filter. | |
ShortcodeBase:: |
public | property | A Boolean indicating whether this filter is enabled. | |
ShortcodeBase:: |
public | function | Add a class into a classes string if not already inside. | |
ShortcodeBase:: |
public | function |
Calculates dependencies for the configured plugin. Overrides DependentPluginInterface:: |
|
ShortcodeBase:: |
public static | function |
Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface:: |
1 |
ShortcodeBase:: |
public | function |
Gets default configuration for this plugin. Overrides ConfigurableInterface:: |
|
ShortcodeBase:: |
public | function | Combines user attributes with known attributes. | |
ShortcodeBase:: |
public | function |
Gets this plugin's configuration. Overrides ConfigurableInterface:: |
|
ShortcodeBase:: |
public | function |
Returns the administrative description for this shortcode plugin. Overrides ShortcodeInterface:: |
|
ShortcodeBase:: |
public | function | Returns image properties for a given image media entity id. | |
ShortcodeBase:: |
public | function |
Returns the administrative label for this shortcode plugin. Overrides ShortcodeInterface:: |
|
ShortcodeBase:: |
public | function | Get a media entity field. | |
ShortcodeBase:: |
public | function | Get the file url for a media object. | |
ShortcodeBase:: |
public | function | Extracts the media id from a 'media/x' system path. | |
ShortcodeBase:: |
public | function | Returns a suitable title string given the user provided title and text. | |
ShortcodeBase:: |
public | function | ||
ShortcodeBase:: |
public | function | Returns a url to be used in a link element given path or url. | |
ShortcodeBase:: |
public | function | Wrapper for renderPlain. | |
ShortcodeBase:: |
public | function |
Sets the configuration for this plugin instance. Overrides ConfigurableInterface:: |
|
ShortcodeBase:: |
public | function |
Generates a shortcode's settings form. Overrides ShortcodeInterface:: |
|
ShortcodeBase:: |
public | function |
Generates a filter's tip. Overrides ShortcodeInterface:: |
11 |
ShortcodeBase:: |
public | function |
Constructs a \Drupal\Component\Plugin\PluginBase object. Overrides PluginBase:: |
1 |
ShortcodeInterface:: |
public | function | Performs the shortcode processing. | 11 |
StringTranslationTrait:: |
protected | property | The string translation service. | 4 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. |