namespace Drupal\pathauto;
-use Drupal\Component\Utility\Unicode;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityInterface;
protected $messenger;
/**
+ * The token entity mapper.
+ *
* @var \Drupal\token\TokenEntityMapperInterface
*/
protected $tokenEntityMapper;
/**
- * @var Drupal\Core\Entity\EntityTypeManagerInterface
+ * The entity type manager.
+ *
+ * @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
* The messenger service.
* @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation
* The string translation service.
- * @param Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
- * The entity type manager
+ * @param \Drupal\token\TokenEntityMapperInterface $token_entity_mapper
+ * The token entity mapper.
+ * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
+ * The entity type manager.
*/
- public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, Token $token, AliasCleanerInterface $alias_cleaner, AliasStorageHelperInterface $alias_storage_helper, AliasUniquifierInterface $alias_uniquifier, MessengerInterface $messenger, TranslationInterface $string_translation, TokenEntityMapperInterface $token_entity_mappper, EntityTypeManagerInterface $entity_type_manager) {
+ public function __construct(ConfigFactoryInterface $config_factory, ModuleHandlerInterface $module_handler, Token $token, AliasCleanerInterface $alias_cleaner, AliasStorageHelperInterface $alias_storage_helper, AliasUniquifierInterface $alias_uniquifier, MessengerInterface $messenger, TranslationInterface $string_translation, TokenEntityMapperInterface $token_entity_mapper, EntityTypeManagerInterface $entity_type_manager) {
$this->configFactory = $config_factory;
$this->moduleHandler = $module_handler;
$this->token = $token;
$this->aliasUniquifier = $alias_uniquifier;
$this->messenger = $messenger;
$this->stringTranslation = $string_translation;
- $this->tokenEntityMapper = $token_entity_mappper;
+ $this->tokenEntityMapper = $token_entity_mapper;
$this->entityTypeManager = $entity_type_manager;
}
'bundle' => $entity->bundle(),
'language' => &$langcode,
);
- // @todo Is still hook still useful?
+ $pattern_original = $pattern->getPattern();
$this->moduleHandler->alter('pathauto_pattern', $pattern, $context);
+ $pattern_altered = $pattern->getPattern();
// Special handling when updating an item which is already aliased.
$existing_alias = NULL;
$this->moduleHandler->alter('pathauto_alias', $alias, $context);
// If we have arrived at an empty string, discontinue.
- if (!Unicode::strlen($alias)) {
+ if (!mb_strlen($alias)) {
return NULL;
}
'language' => $langcode,
);
- return $this->aliasStorageHelper->save($path, $existing_alias, $op);
+ $return = $this->aliasStorageHelper->save($path, $existing_alias, $op);
+
+ // Because there is no way to set an altered pattern to not be cached,
+ // change it back to the original value.
+ if ($pattern_altered !== $pattern_original) {
+ $pattern->setPattern($pattern_original);
+ }
+
+ return $return;
}
/**
- * Loads pathauto patterns for a given entity type ID
+ * Loads pathauto patterns for a given entity type ID.
*
* @param string $entity_type_id
* An entity type ID.
$result = $this->createEntityAlias($entity, $op);
}
catch (\InvalidArgumentException $e) {
- drupal_set_message($e->getMessage(), 'error');
+ $this->messenger->addError($e->getMessage());
return NULL;
}