You are here

class WkhtmltopdfController in wkhtmltopdf 8

Same name and namespace in other branches
  1. 2.0.x src/Controller/WkhtmltopdfController.php \Drupal\wkhtmltopdf\Controller\WkhtmltopdfController

Base for Controller.

Hierarchy

Expanded class hierarchy of WkhtmltopdfController

File

src/Controller/WkhtmltopdfController.php, line 15

Namespace

Drupal\wkhtmltopdf\Controller
View source
class WkhtmltopdfController extends ControllerBase {
  public $settings;
  public $request;
  public $filesystem;

  /**
   * {@inheritdoc}
   */
  public function __construct(ConfigFactory $config, Request $request, FileSystemInterface $filesystem) {
    $this->settings = $config
      ->get('wkhtmltopdf.settings');
    $this->request = $request;
    $this->filesystem = $filesystem;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static($container
      ->get('config.factory'), $container
      ->get('request_stack')
      ->getCurrentRequest(), $container
      ->get('file_system'));
  }

  /**
   * Generate pdf file.
   *
   * @return Symfony\Component\HttpFoundation\RedirectResponse
   *   Redirect
   */
  public function generatePdf() {
    $url = $this->request->query
      ->get('url');
    $binary = $this->settings
      ->get('wkhtmltopdf_bin');
    $path = $this->filesystem
      ->realpath('public://wkhtmltopdf');
    $parameters = '--javascript-delay 5000';
    $parameters .= $this->settings
      ->get('wkhtmltopdf_zoom') ? ' --zoom ' . $this->settings
      ->get('wkhtmltopdf_zoom') : '';
    $file_path = "public://wkhtmltopdf/" . urlencode($url) . '.pdf';
    if (!$this->filesystem
      ->prepareDirectory($file_path)) {
      $this->filesystem
        ->mkdir($path);
    }
    $filename = urlencode($url) . '.pdf';
    $file_path_physical = $path . '/' . $filename;
    $command = $binary . ' ' . $parameters . ' ' . $url . ' ' . $file_path_physical;
    $lock = \Drupal::lock();
    if ($lock
      ->acquire(__FILE__) !== FALSE) {
      shell_exec($command);
      $lock
        ->release(__FILE__);
    }
    else {
      while ($lock
        ->acquire(__FILE__) === FALSE) {
        $lock
          ->wait(__FILE__, 3);
      }
      if ($lock
        ->acquire(__FILE__) !== FALSE) {
        shell_exec($command);
        $lock
          ->release(__FILE__);
      }
    }
    $force_download = $this->settings
      ->get('wkhtmltopdf_download');
    if ($force_download) {
      $this
        ->download($file_path_physical, $filename);
      return new RedirectResponse($url);
    }
    $url_redirect = file_create_url($file_path);
    return new RedirectResponse($url_redirect);
  }

  /**
   * Force download and now redirect.
   *
   * @param string $file_path_physical
   *   File path.
   * @param string $filename
   *   File name.
   */
  public function download($file_path_physical, $filename) {
    header("Content-type: octet/stream");
    header("Content-disposition: attachment; filename=" . $filename . ";");
    header("Content-Length: " . filesize($file_path_physical));
    readfile($file_path_physical);
    exit;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityManager protected property The entity manager.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityManager Deprecated protected function Retrieves the entity manager service.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait::redirect
ControllerBase::state protected function Returns the state storage service.
LinkGeneratorTrait::$linkGenerator protected property The link generator. 1
LinkGeneratorTrait::getLinkGenerator Deprecated protected function Returns the link generator.
LinkGeneratorTrait::l Deprecated protected function Renders a link to a route given a route name and its parameters.
LinkGeneratorTrait::setLinkGenerator Deprecated public function Sets the link generator service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
UrlGeneratorTrait::$urlGenerator protected property The url generator.
UrlGeneratorTrait::getUrlGenerator Deprecated protected function Returns the URL generator service.
UrlGeneratorTrait::setUrlGenerator Deprecated public function Sets the URL generator service.
UrlGeneratorTrait::url Deprecated protected function Generates a URL or path for a specific route based on the given parameters.
WkhtmltopdfController::$filesystem public property
WkhtmltopdfController::$request public property
WkhtmltopdfController::$settings public property
WkhtmltopdfController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
WkhtmltopdfController::download public function Force download and now redirect.
WkhtmltopdfController::generatePdf public function Generate pdf file.
WkhtmltopdfController::__construct public function