Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.0.x will end 8 May 2023 (12 months).
  • Bug fixes for security issues in 4.0.x will end 13 November 2023 (18 months).
  • PHP version: minimum PHP 7.3.0 Note: the minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is also supported.
   1  <?php
   2  
   3  /**

   4   * Injector that converts configuration directive syntax %Namespace.Directive

   5   * to links

   6   */
   7  class HTMLPurifier_Injector_PurifierLinkify extends HTMLPurifier_Injector
   8  {
   9      /**

  10       * @type string

  11       */
  12      public $name = 'PurifierLinkify';
  13  
  14      /**

  15       * @type string

  16       */
  17      public $docURL;
  18  
  19      /**

  20       * @type array

  21       */
  22      public $needed = array('a' => array('href'));
  23  
  24      /**

  25       * @param HTMLPurifier_Config $config

  26       * @param HTMLPurifier_Context $context

  27       * @return string

  28       */
  29      public function prepare($config, $context)
  30      {
  31          $this->docURL = $config->get('AutoFormat.PurifierLinkify.DocURL');
  32          return parent::prepare($config, $context);
  33      }
  34  
  35      /**

  36       * @param HTMLPurifier_Token $token

  37       */
  38      public function handleText(&$token)
  39      {
  40          if (!$this->allowsElement('a')) {
  41              return;
  42          }
  43          if (strpos($token->data, '%') === false) {
  44              return;
  45          }
  46  
  47          $bits = preg_split('#%([a-z0-9]+\.[a-z0-9]+)#Si', $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
  48          $token = array();
  49  
  50          // $i = index

  51          // $c = count

  52          // $l = is link

  53          for ($i = 0, $c = count($bits), $l = false; $i < $c; $i++, $l = !$l) {
  54              if (!$l) {
  55                  if ($bits[$i] === '') {
  56                      continue;
  57                  }
  58                  $token[] = new HTMLPurifier_Token_Text($bits[$i]);
  59              } else {
  60                  $token[] = new HTMLPurifier_Token_Start(
  61                      'a',
  62                      array('href' => str_replace('%s', $bits[$i], $this->docURL))
  63                  );
  64                  $token[] = new HTMLPurifier_Token_Text('%' . $bits[$i]);
  65                  $token[] = new HTMLPurifier_Token_End('a');
  66              }
  67          }
  68      }
  69  }
  70  
  71  // vim: et sw=4 sts=4