pathauto-8.x-1.8/src/Plugin/pathauto/AliasType/ForumAliasType.php
src/Plugin/pathauto/AliasType/ForumAliasType.php
<?php
namespace Drupal\pathauto\Plugin\pathauto\AliasType;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Database\Connection;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\KeyValueStore\KeyValueFactoryInterface;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
use Drupal\Core\Plugin\Context\EntityContextDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\pathauto\Attribute\AliasType;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* A pathauto alias type plugin for forum terms.
*
* @AliasType(
* id = "forum",
* label = @Translation("Forum"),
* types = {"term"},
* provider = "forum",
* context_definitions = {
* "taxonomy_term" = @ContextDefinition("entity:taxonomy_term")
* }
* )
*/
#[AliasType(
id: 'forum',
label: new TranslatableMarkup('Forum'),
types: ['term'],
provider: 'forum',
context_definitions: [
'taxonomy_term' => new EntityContextDefinition("entity:taxonomy_term"),
],
)]
class ForumAliasType extends EntityAliasTypeBase implements ContainerFactoryPluginInterface {
/**
* The config factory.
*
* @var \Drupal\Core\Config\ConfigFactoryInterface
*/
protected $configFactory;
/**
* Constructs a ForumAliasType instance.
*
* @param array $configuration
* A configuration array containing information about the plugin instance.
* @param string $plugin_id
* The plugin_id for the plugin instance.
* @param mixed $plugin_definition
* The plugin implementation definition.
* @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
* The module handler service.
* @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
* The language manager service.
* @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
* The entity manager service.
* @param \Drupal\Core\KeyValueStore\KeyValueFactoryInterface $key_value
* The key/value manager service.
* @param \Drupal\Core\Database\Connection $database
* The database service.
* @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
* The config factory.
*/
public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler, LanguageManagerInterface $language_manager, EntityTypeManagerInterface $entity_type_manager, KeyValueFactoryInterface $key_value, Connection $database, ConfigFactoryInterface $config_factory) {
parent::__construct($configuration, $plugin_id, $plugin_definition, $module_handler, $language_manager, $entity_type_manager, $key_value, $database);
$this->configFactory = $config_factory;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static(
$configuration,
$plugin_id,
$plugin_definition,
$container->get('module_handler'),
$container->get('language_manager'),
$container->get('entity_type.manager'),
$container->get('keyvalue'),
$container->get('database'),
$container->get('config.factory')
);
}
/**
* {@inheritdoc}
*/
protected function getEntityTypeId() {
return 'taxonomy_term';
}
/**
* {@inheritdoc}
*/
public function getSourcePrefix() {
return '/forum/';
}
/**
* {@inheritdoc}
*/
public function applies($object) {
if (parent::applies($object)) {
/** @var \Drupal\taxonomy\TermInterface $object */
$vid = $this->configFactory->get('forum.settings')->get('vocabulary');
return $object->bundle() == $vid;
}
return FALSE;
}
}
