Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
   1  <?php
   2  
   3  class HTMLPurifier_Filter_YouTube extends HTMLPurifier_Filter
   4  {
   5  
   6      /**
   7       * @type string
   8       */
   9      public $name = 'YouTube';
  10  
  11      /**
  12       * @param string $html
  13       * @param HTMLPurifier_Config $config
  14       * @param HTMLPurifier_Context $context
  15       * @return string
  16       */
  17      public function preFilter($html, $config, $context)
  18      {
  19          $pre_regex = '#<object[^>]+>.+?' .
  20              '(?:http:)?//www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+).+?</object>#s';
  21          $pre_replace = '<span class="youtube-embed">\1</span>';
  22          return preg_replace($pre_regex, $pre_replace, $html);
  23      }
  24  
  25      /**
  26       * @param string $html
  27       * @param HTMLPurifier_Config $config
  28       * @param HTMLPurifier_Context $context
  29       * @return string
  30       */
  31      public function postFilter($html, $config, $context)
  32      {
  33          $post_regex = '#<span class="youtube-embed">((?:v|cp)/[A-Za-z0-9\-_=]+)</span>#';
  34          return preg_replace_callback($post_regex, array($this, 'postFilterCallback'), $html);
  35      }
  36  
  37      /**
  38       * @param $url
  39       * @return string
  40       */
  41      protected function armorUrl($url)
  42      {
  43          return str_replace('--', '-&#45;', $url);
  44      }
  45  
  46      /**
  47       * @param array $matches
  48       * @return string
  49       */
  50      protected function postFilterCallback($matches)
  51      {
  52          $url = $this->armorUrl($matches[1]);
  53          return '<object width="425" height="350" type="application/x-shockwave-flash" ' .
  54          'data="//www.youtube.com/' . $url . '">' .
  55          '<param name="movie" value="//www.youtube.com/' . $url . '"></param>' .
  56          '<!--[if IE]>' .
  57          '<embed src="//www.youtube.com/' . $url . '"' .
  58          'type="application/x-shockwave-flash"' .
  59          'wmode="transparent" width="425" height="350" />' .
  60          '<![endif]-->' .
  61          '</object>';
  62      }
  63  }
  64  
  65  // vim: et sw=4 sts=4