View source
<?php
namespace Drupal\webform_share\Element;
use Drupal\Core\Render\Element\RenderElement;
use Drupal\Core\Security\TrustedCallbackInterface;
use Drupal\Core\Url;
use Drupal\webform\Plugin\WebformSourceEntity\QueryStringWebformSourceEntity;
class WebformShareIframe extends RenderElement implements TrustedCallbackInterface {
const LIBRARY = 'iframe-resizer';
const VERSION = '4.2.10';
public function getInfo() {
$class = get_class($this);
return [
'#webform' => NULL,
'#source_entity' => NULL,
'#javascript' => FALSE,
'#script' => '//cdn.jsdelivr.net/gh/davidjbradshaw/iframe-resizer@' . static::VERSION . '/js/iframeResizer.min.js',
'#query' => [],
'#options' => [],
'#test' => [],
'#theme' => 'webform_share_iframe',
'#pre_render' => [
[
$class,
'preRenderWebformShareIframe',
],
],
];
}
public static function preRenderWebformShareIframe($element) {
$webform = $element['#webform'];
$source_entity = $element['#source_entity'];
if ($element['#javascript']) {
$route_name = 'entity.webform.share_page.javascript';
$route_parameters = [
'webform' => $webform
->id(),
'library' => static::LIBRARY,
'version' => static::VERSION,
];
$attributes = [
'style' => 'width:1px;min-width:100%',
];
}
else {
$route_name = 'entity.webform.share_page';
$route_parameters = [
'webform' => $webform
->id(),
];
$attributes = [
'style' => 'width:100%;height:600px;border:none',
];
}
$route_options = QueryStringWebformSourceEntity::getRouteOptionsQuery($source_entity);
$route_options += [
'query' => [],
];
if ($element['#query']) {
$route_options['query'] += $element['#query'];
}
if ($element['#test']) {
$route_options['query']['_webform_test'] = $webform
->id();
}
if (empty($route_options['query'])) {
unset($route_options['query']);
}
$url = Url::fromRoute($route_name, $route_parameters, $route_options);
$src = preg_replace('#^https?:#', '', $url
->setAbsolute()
->toString());
$title = $webform
->label() . ' | ' . \Drupal::config('system.site')
->get('name');
$element += [
'#attributes' => [],
];
$element['#attributes'] += [
'src' => $src,
'title' => $title,
'class' => [],
'frameborder' => '0',
'allow' => 'geolocation; microphone; camera',
'allowtransparency' => 'true',
'allowfullscreen' => 'true',
] + $attributes;
return $element;
}
public static function trustedCallbacks() {
return [
'preRenderWebformShareIframe',
];
}
}