Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
   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