Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.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