View source
<?php
namespace Drupal\entity_print_views\Controller;
use Drupal\Component\Render\FormattableMarkup;
use Drupal\Component\Utility\Xss;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Url;
use Drupal\entity_print\PrintBuilderInterface;
use Drupal\entity_print\PrintEngineException;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Drupal\entity_print\Plugin\EntityPrintPluginManagerInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
class ViewPrintController extends ControllerBase {
protected $pluginManager;
protected $printBuilder;
protected $entityTypeManager;
protected $currentRequest;
public function __construct(EntityPrintPluginManagerInterface $plugin_manager, PrintBuilderInterface $print_builder, EntityTypeManagerInterface $entity_type_manager, Request $current_request, AccountInterface $current_user) {
$this->pluginManager = $plugin_manager;
$this->printBuilder = $print_builder;
$this->entityTypeManager = $entity_type_manager;
$this->currentRequest = $current_request;
$this->currentUser = $current_user;
}
public static function create(ContainerInterface $container) {
return new static($container
->get('plugin.manager.entity_print.print_engine'), $container
->get('entity_print.print_builder'), $container
->get('entity_type.manager'), $container
->get('request_stack')
->getCurrentRequest(), $container
->get('current_user'));
}
public function viewPrint($export_type, $view_name, $display_id) {
$config = $this
->config('entity_print.settings');
$view = $this->entityTypeManager
->getStorage('view')
->load($view_name);
$executable = $view
->getExecutable();
$executable
->setDisplay($display_id);
if ($args = $this->currentRequest->query
->get('view_args')) {
$executable
->setArguments($args);
}
try {
$print_engine = $this->pluginManager
->createSelectedInstance($export_type);
} catch (PrintEngineException $e) {
$this
->messenger()
->addError(new FormattableMarkup('Error generating Print: ' . Xss::filter($e
->getMessage()), []));
$url = $executable
->hasUrl(NULL, $display_id) ? $executable
->getUrl(NULL, $display_id)
->toString() : Url::fromRoute('<front>');
return new RedirectResponse($url);
}
return (new StreamedResponse(function () use ($view, $print_engine, $config) {
$this->printBuilder
->deliverPrintable([
$view,
], $print_engine, $config
->get('force_download'), $config
->get('default_css'));
}))
->send();
}
public function viewPrintDebug($export_type, $view_name, $display_id) {
$view = $this->entityTypeManager
->getStorage('view')
->load($view_name);
$executable = $view
->getExecutable();
$executable
->setDisplay($display_id);
if ($args = $this->currentRequest->query
->get('view_args')) {
$executable
->setArguments($args);
}
$use_default_css = $this
->config('entity_print.settings')
->get('default_css');
return new Response($this->printBuilder
->printHtml($view, $use_default_css, FALSE));
}
public function checkAccess($export_type, $view_name, $display_id) {
$view = $this->entityTypeManager
->getStorage('view')
->load($view_name)
->getExecutable();
$account = $this
->currentUser();
$result = AccessResult::allowedIfHasPermission($account, 'entity print views access');
return $result
->isAllowed() && $view
->access($display_id, $account) ? $result : AccessResult::forbidden();
}
public function viewRedirect($export_type, $view_name, $display_id) {
return $this
->redirect('entity_print_views.view', [
'export_type' => $export_type,
'view_name' => $view_name,
'display_id' => $display_id,
]);
}
public function viewRedirectDebug($export_type, $view_name, $display_id) {
return $this
->redirect('entity_print_views.view.debug', [
'export_type' => $export_type,
'view_name' => $view_name,
'display_id' => $display_id,
]);
}
}