protected function WebformSignature::getImageUrl in Webform 6.x
Same name and namespace in other branches
- 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\WebformElementCode
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);
}