YoutubeTwigExtension.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace Grav\Plugin\Youtube\Twig;
  3. use Grav\Common\GravTrait;
  4. class YoutubeTwigExtension extends \Twig_Extension
  5. {
  6. use GravTrait;
  7. /**
  8. * Returns extension name.
  9. *
  10. * @return string
  11. */
  12. public function getName()
  13. {
  14. return 'YoutubeTwigExtension';
  15. }
  16. /**
  17. * {@inheritdoc}
  18. */
  19. public function getFunctions()
  20. {
  21. return [
  22. new \Twig_SimpleFunction('youtube_embed_url', [$this, 'embedUrl']),
  23. ];
  24. }
  25. /**
  26. * Builds YouTube video embed URL.
  27. *
  28. * @param string $video_id
  29. * @param array $player_parameters
  30. * @param bool $privacy_enhanced_mode
  31. * @return string
  32. */
  33. public function embedUrl($video_id, array $player_parameters = array(), $privacy_enhanced_mode = FALSE)
  34. {
  35. $grav = static::getGrav();
  36. // build base video embed URL (while respecting privacy enhanced mode setting)
  37. $url = 'https://www.youtube' . ($privacy_enhanced_mode ? '-nocookie' : '') . '.com/embed/' . $video_id;
  38. // filter player parameters to only those not matching YouTube defaults
  39. $filtered_player_parameters = array();
  40. foreach ($player_parameters as $key => $value) {
  41. $parameter_blueprint = $grav['config']->blueprints()->get('plugins.youtube.player_parameters.' . $key);
  42. // configured value matches YouTube default -> skip parameter
  43. if (isset($parameter_blueprint['default']) && $parameter_blueprint['default'] == $value) {
  44. continue;
  45. }
  46. $filtered_player_parameters[$key] = $value;
  47. }
  48. // append query string (if any)
  49. if (!empty($filtered_player_parameters) && ($query_string = http_build_query($filtered_player_parameters))) {
  50. $url .= '?' . $query_string;
  51. }
  52. return $url;
  53. }
  54. }