You are here

protected function WebformSignature::getImageUrl in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Plugin/WebformElement/WebformSignature.php \Drupal\webform\Plugin\WebformElement\WebformSignature::getImageUrl()

Get a signature element's image URL.

Signature image uses the public: file system because the image name is a secure hash and there is no risk of https://www.drupal.org/psa-2016-003.

Parameters

array $element: An element.

\Drupal\webform\WebformSubmissionInterface $webform_submission: A webform submission.

array $options: An array of options.

Return value

string A signature element's image URI.

See also

https://stackoverflow.com/questions/11511511/how-to-save-a-png-image-ser...

2 calls to WebformSignature::getImageUrl()
WebformSignature::formatHtmlItem in src/Plugin/WebformElement/WebformSignature.php
Format an element's value as HTML.
WebformSignature::formatTextItem in src/Plugin/WebformElement/WebformSignature.php
Format an element's value as text.

File

src/Plugin/WebformElement/WebformSignature.php, line 261

Class

WebformSignature
Provides a 'signature' element.

Namespace

Drupal\webform\Plugin\WebformElement

Code

protected function getImageUrl(array $element, WebformSubmissionInterface $webform_submission, array $options = []) {
  $value = $this
    ->getValue($element, $webform_submission, $options);
  if (!$value) {
    return '';
  }

  // Make sure existing signature values are valid.
  if (!WebformSignatureElement::isSignatureValid($value)) {
    return '';
  }
  $webform = $webform_submission
    ->getWebform();
  $element_key = isset($element['#webform_composite_key']) ? $element['#webform_composite_key'] : $element['#webform_key'];
  $sid = $webform_submission
    ->id();
  $image_base_directory = 'public://webform/' . $webform
    ->id();

  // Create signature image (no results) directory.
  $image_signature_directory = "{$image_base_directory}/{$element_key}";
  $this->fileSystem
    ->prepareDirectory($image_signature_directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
  $image_directory = $image_signature_directory;

  // Create signature image submission directory.
  if ($sid) {
    $image_submission_directory = "{$image_base_directory}/{$element_key}/{$sid}";
    $this->fileSystem
      ->prepareDirectory($image_submission_directory, FileSystemInterface::CREATE_DIRECTORY | FileSystemInterface::MODIFY_PERMISSIONS);
    $image_directory = $image_submission_directory;
  }

  // If a signature file was already created and shared using an
  // unsafe image hash, then return it.
  $unsafe_image_hash = Crypt::hmacBase64($value, Settings::getHashSalt());
  $unsafe_image_uri = "{$image_directory}/signature-{$unsafe_image_hash}.png";
  if (file_exists($unsafe_image_uri)) {
    return file_create_url($unsafe_image_uri);
  }
  $image_hash = Crypt::hmacBase64('webform-signature-' . $value, Settings::getHashSalt());
  $image_uri = "{$image_directory}/signature-{$image_hash}.png";
  if (!file_exists($image_uri)) {

    // Copy existing file.
    if ($sid && file_exists("{$image_signature_directory}/signature-{$image_hash}.png")) {
      $this->fileSystem
        ->move("{$image_signature_directory}/signature-{$image_hash}.png", "{$image_directory}/signature-{$image_hash}.png");
    }
    else {
      $data = base64_decode(preg_replace('#^data:image/\\w+;base64,#i', '', $value));
      file_put_contents($image_uri, $data);
    }
  }
  return file_create_url($image_uri);
}