trait TempStoreTrait
Provides methods for modified rules components in temporary storage.
Note that this implements the lock-related methods of \Drupal\rules\Ui\RulesUiHandlerInterface.
Hierarchy
- trait \Drupal\rules\Ui\TempStoreTrait
See also
\Drupal\rules\Ui\RulesUiHandlerInterface
\Drupal\rules\Ui\RulesUiConfigHandler
File
-
src/
Ui/ TempStoreTrait.php, line 19
Namespace
Drupal\rules\UiView source
trait TempStoreTrait {
/**
* The tempstore factory.
*
* @var \Drupal\Core\TempStore\SharedTempStoreFactory
*/
protected $tempStoreFactory;
/**
* The temporary store for the rules component.
*
* @var \Drupal\Core\TempStore\SharedTempStore
*/
protected $tempStore;
/**
* The currently active rules UI handler.
*
* @var \Drupal\rules\Ui\RulesUiHandlerInterface
*/
protected $rulesUiHandler;
/**
* The date formatter service.
*
* @var \Drupal\Core\Datetime\DateFormatterInterface
*/
protected $dateFormatter;
/**
* The renderer service.
*
* @var \Drupal\Core\Render\RendererInterface
*/
protected $renderer;
/**
* The entity type manager service.
*
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* Retrieves the renderer service if not already present.
*
* @return \Drupal\Core\Render\RendererInterface
* The renderer service.
*/
public function getRenderer() {
if (!isset($this->renderer)) {
$this->renderer = \Drupal::service('renderer');
}
return $this->renderer;
}
/**
* Retrieves the temporary storage service if not already present.
*
* @return \Drupal\Core\TempStore\SharedTempStoreFactory
* The factory.
*/
protected function getTempStoreFactory() {
if (!isset($this->tempStoreFactory)) {
$this->tempStoreFactory = \Drupal::service('tempstore.shared');
}
return $this->tempStoreFactory;
}
/**
* Setter injection for the temporary storage factory.
*
* @param \Drupal\Core\TempStore\SharedTempStoreFactory $temp_store_factory
* The factory.
*
* @return $this
*/
public function setTempStoreFactory(SharedTempStoreFactory $temp_store_factory) {
$this->tempStoreFactory = $temp_store_factory;
return $this;
}
/**
* Retrieves the date formatter service if not already present.
*
* @return \Drupal\Core\Datetime\DateFormatterInterface
* The service.
*/
protected function getDateFormatter() {
if (!isset($this->dateFormatter)) {
$this->dateFormatter = \Drupal::service('date.formatter');
}
return $this->dateFormatter;
}
/**
* Setter injection for the date formatter service.
*
* @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
* The service.
*
* @return $this
*/
public function setDateFormatter(DateFormatterInterface $date_formatter) {
$this->dateFormatter = $date_formatter;
return $this;
}
/**
* Retrieves the entity type manager service if not already present.
*
* @return \Drupal\Core\Entity\EntityTypeManagerInterface
* The entity type manager.
*/
protected function getEntityTypeManager() {
if (!isset($this->entityTypeManager)) {
$this->entityTypeManager = \Drupal::service('entity_type.manager');
}
return $this->entityTypeManager;
}
/**
* Gets the currently active RulesUI's handler.
*
* @return \Drupal\rules\Ui\RulesUiHandlerInterface
* The RulesUI handler.
*/
protected function getRulesUiHandler() {
// Usually the trait is used on the RulesUI handler.
return $this;
}
/**
* Fetches the stored data from the temporary storage.
*
* @return mixed|null
* The stored data or NULL if the temp store is empty.
*/
protected function fetchFromTempStore() {
return $this->getTempStore()
->get($this->getTempStoreItemId());
}
/**
* Stores some data in the temporary storage.
*
* @param mixed $data
* The data to store.
*/
protected function storeToTempStore($data) {
$this->getTempStore()
->set($this->getTempStoreItemId(), $data);
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::clearTemporaryStorage()
*/
public function clearTemporaryStorage() {
$this->getTempStore()
->delete($this->getTempStoreItemId());
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::isLocked()
*/
public function isLocked() {
// If there is an object in the temporary storage from another user then
// this component is locked.
if ($this->getTempStore()
->get($this->getTempStoreItemId()) && !$this->getTempStore()
->getIfOwner($this->getTempStoreItemId())) {
return TRUE;
}
return FALSE;
}
/**
* Generates the temp store item's ID to use for the edited component.
*
* @return string
* The temp store ID.
*/
private function getTempStoreItemId() {
// The internal path is unique for the currently edited component.
return $this->getRulesUiHandler()
->getBaseRouteUrl()
->getInternalPath();
}
/**
* Gets the temporary storage repository from the factory.
*
* @return \Drupal\Core\TempStore\SharedTempStore
* The shared storage.
*/
private function getTempStore() {
if (!isset($this->tempStore)) {
$this->tempStore = $this->getTempStoreFactory()
->get($this->getRulesUiHandler()
->getPluginId());
}
return $this->tempStore;
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::getLockMetaData()
*/
public function getLockMetaData() {
return $this->getTempStore()
->getMetadata($this->getTempStoreItemId());
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::isEdited()
*/
public function isEdited() {
if ($this->getTempStore()
->get($this->getTempStoreItemId())) {
return TRUE;
}
return FALSE;
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::addLockInformation()
*/
public function addLockInformation() {
$build = [];
if ($this->isLocked()) {
$build['locked'] = [
'#type' => 'container',
'#attributes' => [
'class' => [
'rules-locked',
'messages',
'messages--warning',
],
],
'#children' => $this->lockInformationMessage(),
'#weight' => -10,
];
}
else {
$build['changed'] = [
'#type' => 'container',
'#attributes' => [
'class' => [
'rules-changed',
'messages',
'messages--warning',
],
],
'#children' => $this->t('You have unsaved changes.'),
'#weight' => -10,
];
if (!$this->isEdited()) {
$build['changed']['#attributes']['class'][] = 'js-hide';
}
}
return $build;
}
/**
* @see \Drupal\rules\Ui\RulesUiHandlerInterface::validateLock()
*/
public function validateLock(array &$form, FormStateInterface $form_state) {
if ($this->isLocked()) {
$form_state->setErrorByName('locked', $this->lockInformationMessage());
}
}
/**
* Provides a lock info message.
*
* @return \Drupal\Core\StringTranslation\TranslatableMarkup
* The message suitable to be shown in the UI.
*/
private function lockInformationMessage() {
$lock = $this->getLockMetaData();
$username = [
'#theme' => 'username',
'#account' => $this->getEntityTypeManager()
->getStorage('user')
->load($lock->getOwnerId()),
];
$lock_message_substitutions = [
'@user' => $this->getRenderer()
->render($username),
'@age' => $this->getDateFormatter()
->formatTimeDiffSince($lock->getUpdated()),
'@component_type' => $this->getRulesUiHandler()
->getPluginDefinition()->component_type_label,
':url' => Url::fromRoute($this->getRulesUiHandler()
->getPluginDefinition()->base_route . '.break_lock', \Drupal::routeMatch()->getRawParameters()
->all())
->toString(),
];
return $this->t('This @component_type is being edited by user @user, and is therefore locked from editing by others. This lock is @age old. Click here to <a href=":url">break this lock</a>.', $lock_message_substitutions);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary |
---|---|---|---|
TempStoreTrait::$dateFormatter | protected | property | The date formatter service. |
TempStoreTrait::$entityTypeManager | protected | property | The entity type manager service. |
TempStoreTrait::$renderer | protected | property | The renderer service. |
TempStoreTrait::$rulesUiHandler | protected | property | The currently active rules UI handler. |
TempStoreTrait::$tempStore | protected | property | The temporary store for the rules component. |
TempStoreTrait::$tempStoreFactory | protected | property | The tempstore factory. |
TempStoreTrait::addLockInformation | public | function | |
TempStoreTrait::clearTemporaryStorage | public | function | |
TempStoreTrait::fetchFromTempStore | protected | function | Fetches the stored data from the temporary storage. |
TempStoreTrait::getDateFormatter | protected | function | Retrieves the date formatter service if not already present. |
TempStoreTrait::getEntityTypeManager | protected | function | Retrieves the entity type manager service if not already present. |
TempStoreTrait::getLockMetaData | public | function | |
TempStoreTrait::getRenderer | public | function | Retrieves the renderer service if not already present. |
TempStoreTrait::getRulesUiHandler | protected | function | Gets the currently active RulesUI's handler. |
TempStoreTrait::getTempStore | private | function | Gets the temporary storage repository from the factory. |
TempStoreTrait::getTempStoreFactory | protected | function | Retrieves the temporary storage service if not already present. |
TempStoreTrait::getTempStoreItemId | private | function | Generates the temp store item's ID to use for the edited component. |
TempStoreTrait::isEdited | public | function | |
TempStoreTrait::isLocked | public | function | |
TempStoreTrait::lockInformationMessage | private | function | Provides a lock info message. |
TempStoreTrait::setDateFormatter | public | function | Setter injection for the date formatter service. |
TempStoreTrait::setTempStoreFactory | public | function | Setter injection for the temporary storage factory. |
TempStoreTrait::storeToTempStore | protected | function | Stores some data in the temporary storage. |
TempStoreTrait::validateLock | public | function |