View source
<?php
namespace Drupal\views\Plugin\views\argument_default;
use Drupal\Core\Cache\Cache;
use Drupal\Core\Cache\CacheableDependencyInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Path\AliasManagerInterface as CoreAliasManagerInterface;
use Drupal\Core\Path\CurrentPathStack;
use Drupal\path_alias\AliasManagerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Raw extends ArgumentDefaultPluginBase implements CacheableDependencyInterface {
protected $aliasManager;
protected $currentPath;
public function __construct(array $configuration, $plugin_id, $plugin_definition, $alias_manager, CurrentPathStack $current_path) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
if (!$alias_manager instanceof AliasManagerInterface) {
@trigger_error('Calling \\' . __METHOD__ . ' with \\' . CoreAliasManagerInterface::class . ' instead of \\' . AliasManagerInterface::class . ' is deprecated in drupal:8.8.0. The new service will be required in drupal:9.0.0. See https://www.drupal.org/node/3092086', E_USER_DEPRECATED);
$alias_manager = \Drupal::service('path_alias.manager');
}
$this->aliasManager = $alias_manager;
$this->currentPath = $current_path;
}
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($configuration, $plugin_id, $plugin_definition, $container
->get('path_alias.manager'), $container
->get('path.current'));
}
protected function defineOptions() {
$options = parent::defineOptions();
$options['index'] = [
'default' => '',
];
$options['use_alias'] = [
'default' => FALSE,
];
return $options;
}
public function buildOptionsForm(&$form, FormStateInterface $form_state) {
parent::buildOptionsForm($form, $form_state);
$form['index'] = [
'#type' => 'select',
'#title' => $this
->t('Path component'),
'#default_value' => $this->options['index'],
'#options' => range(1, 10),
'#description' => $this
->t('The numbering starts from 1, e.g. on the page admin/structure/types, the 3rd path component is "types".'),
];
$form['use_alias'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Use path alias'),
'#default_value' => $this->options['use_alias'],
'#description' => $this
->t('Use path alias instead of internal path.'),
];
}
public function getArgument() {
$path = rtrim($this->currentPath
->getPath($this->view
->getRequest()), '/');
if ($this->options['use_alias']) {
$path = $this->aliasManager
->getAliasByPath($path);
}
$args = explode('/', $path);
array_shift($args);
if (isset($args[$this->options['index']])) {
return $args[$this->options['index']];
}
}
public function getCacheMaxAge() {
return Cache::PERMANENT;
}
public function getCacheContexts() {
return [
'url',
];
}
}