View source
<?php
namespace Drupal\filefield_paths;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\StreamWrapper\StreamWrapperManager;
use Drupal\Core\StreamWrapper\StreamWrapperManagerInterface;
use Drupal\Core\Language\Language;
use Psr\Log\LoggerInterface;
class Redirect implements RedirectInterface {
protected $redirectStorage;
protected $streamWrapperManager;
protected $configFactory;
protected $logger;
public function __construct(EntityTypeManagerInterface $entity_type_manager, StreamWrapperManagerInterface $stream_wrapper_manager, ConfigFactoryInterface $config_factory, LoggerInterface $logger) {
$this->redirectStorage = $entity_type_manager
->getStorage('redirect');
$this->streamWrapperManager = $stream_wrapper_manager;
$this->configFactory = $config_factory;
$this->logger = $logger;
}
public function createRedirect($source, $path, Language $language) {
$this->logger
->debug('Creating redirect from @source to @path.', [
'@source' => $source,
'@path' => $path,
]);
$redirect = $this->redirectStorage
->create([]);
$parsed_source = $this
->getPath($source);
$parsed_path = $this
->getPath($path);
$redirect
->setSource($parsed_source);
$redirect
->setRedirect($parsed_path);
$redirect
->setStatusCode($this->configFactory
->get('redirect.settings')
->get('default_status_code'));
$hash = $redirect
->generateHash($parsed_path, [], $language
->getId());
$redirects = $this->redirectStorage
->loadByProperties([
'hash' => $hash,
]);
if (empty($redirects)) {
$redirect
->save();
}
}
protected function getPath($file_uri) {
if ($wrapper = $this->streamWrapperManager
->getViaUri($file_uri)) {
$directory = $wrapper
->getDirectoryPath();
$target = StreamWrapperManager::getTarget($file_uri);
return $directory . DIRECTORY_SEPARATOR . $target;
}
}
}