72 lines
1.7 KiB
PHP
72 lines
1.7 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Contains \Drupal\text\TextProcessed.
|
|
*/
|
|
|
|
namespace Drupal\text;
|
|
|
|
use Drupal\Core\TypedData\DataDefinitionInterface;
|
|
use Drupal\Core\TypedData\TypedDataInterface;
|
|
use Drupal\Core\TypedData\TypedData;
|
|
|
|
/**
|
|
* A computed property for processing text with a format.
|
|
*
|
|
* Required settings (below the definition's 'settings' key) are:
|
|
* - text source: The text property containing the to be processed text.
|
|
*/
|
|
class TextProcessed extends TypedData {
|
|
|
|
/**
|
|
* Cached processed text.
|
|
*
|
|
* @var string|null
|
|
*/
|
|
protected $processed = NULL;
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function __construct(DataDefinitionInterface $definition, $name = NULL, TypedDataInterface $parent = NULL) {
|
|
parent::__construct($definition, $name, $parent);
|
|
|
|
if ($definition->getSetting('text source') === NULL) {
|
|
throw new \InvalidArgumentException("The definition's 'text source' key has to specify the name of the text property to be processed.");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getValue() {
|
|
if ($this->processed !== NULL) {
|
|
return $this->processed;
|
|
}
|
|
|
|
$item = $this->getParent();
|
|
$text = $item->{($this->definition->getSetting('text source'))};
|
|
|
|
// Avoid running check_markup() on empty strings.
|
|
if (!isset($text) || $text === '') {
|
|
$this->processed = '';
|
|
}
|
|
else {
|
|
$this->processed = check_markup($text, $item->format, $item->getLangcode());
|
|
}
|
|
return $this->processed;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function setValue($value, $notify = TRUE) {
|
|
$this->processed = $value;
|
|
// Notify the parent of any changes.
|
|
if ($notify && isset($this->parent)) {
|
|
$this->parent->onChange($this->name);
|
|
}
|
|
}
|
|
|
|
}
|